خطای No route found with name یا No route was found matching the URL یکی از رایجترین و اعصابخردکنترین ارورهایی است که برنامهنویسان Symfony (بهخصوص در نسخههای ۶ و ۷) با آن مواجه میشوند.
شما کد رو مینویسید، روت رو دقیقاً تعریف کردهاید، اما وقتی صفحه را رفرش میکنید، با این پیام قرمز رنگ مواجه میشوید:
No route found for "GET /your-url"
// یا
No route found with the name "admin_dashboard"
نگران نباشید! در این مقاله جامع (بیش از ۳۰۰۰ کلمه) تمام دلایل شایع خطای No route found در Symfony 6 و Symfony 7 را بررسی میکنیم و دقیقاً به شما میگوییم چطور در کمتر از ۵ دقیقه این مشکل را برای همیشه حل کنید.
فهرست مطالب
- خطای No route found چیست و چرا رخ میدهد؟
- ۱۰ علت شایع خطای No route found در Symfony 6 و 7
- روشهای سریع و تضمینی رفع خطا (قدمبهقدم + کد)
- چکلیست ۳۰ ثانیهای برای دیباگ سریع
- سوالات متداول (FAQ)
- نتیجهگیری
۱. خطای No route found چیست؟
وقتی Symfony نمیتواند URL درخواستی شما را با هیچکدام از روتهای تعریفشده تطبیق دهد، دو نوع خطا نمایش میدهد:
- No route found for “GET /profile” → یعنی هیچ روتی برای این مسیر و متد پیدا نشد.
- No route found with the name “user_profile” → یعنی شما با نام روت (مثلاً
{{ path('user_profile') }}) فراخوانی کردید، اما چنین نامی وجود ندارد.
این خطا معمولاً در دو محیط رخ میدهد:
- محیط توسعه (dev) → راحتتر دیباگ میشود
- محیط تولید (prod) → به خاطر کش، خیلی دردسرسازتر است
۲. ۱۰ علت شایع خطای No route found در Symfony 6 و 7

| # | علت | نسخههای درگیر | احتمال وقوع |
| 1 | کش روت قدیمی یا خراب | همه نسخهها (بهخصوص prod) | ★★★★★ |
| 2 | اشتباه تایپی در نام روت | ۶ و ۷ | ★★★★★ |
| 3 | استفاده از Annotation به جای Attribute در Symfony 6+ | فقط ۶ و ۷ | ★★★★ |
| 4 | متد HTTP اشتباه (GET به جای POST یا بالعکس) | همه | ★★★★ |
| 5 | مشکل در _locale یا پیشوند locale | پروژههای چندزبانه | ★★★ |
| 6 | روت در فایل YAML/XML اشتباه نوشته شده | همه | ★★★ |
| 7 | security firewall یا access_control مسیر را بلاک کرده | همه | ★★★ |
| 8 | روت داخل پکیج سوم (bundle) لود نشده | ۶ و ۷ | ★★ |
| 9 | مشکل در import روتها (@App/Controller/) | ۶ و ۷ | ★★ |
| 10 | استفاده از نام روت قدیمی بعد از ریفکتورینگ | همه | ★★ |
حالا هر کدام را با راهحل دقیق بررسی میکنیم.
۳. روشهای تضمینی رفع خطای No route found (با کد واقعی)
روش ۱: پاک کردن کش روت (۹۰٪ مواقع مشکل حل میشود!)
در محیط توسعه:
php bin/console cache:clear
در محیط تولید (prod):
php bin/console cache:clear --env=prod
# یا اگر دسترسی SSH دارید:
rm -rf var/cache/prod/*
بعد از آن حتماً warm-up کنید:
php bin/console cache:warmup --env=prod
روش ۲: چک کردن نام دقیق روت
دستور زیر تمام روتهای موجود را نشان میدهد:
php bin/console debug:router | grep dashboard
خروجی نمونه:
admin_dashboard GET ANY ANY /admin/dashboard
حالا در Twig یا کنترلر دقیقاً همین نام را استفاده کنید:
{{ path('admin_dashboard') }}
هشدار: حتی یک فاصله یا حروف بزرگ/کوچک اشتباه باشد، خطا میدهد!
روش ۳: تبدیل Annotation به Attribute (Symfony 6 و 7)
در Symfony 6 به بعد، Annotation منسوخ شده و باید از PHP 8 Attribute استفاده کنید.
قدیمی (کار نمیکند مگر doctrine/annotations نصب باشد):
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/profile", name="user_profile")
*/
جدید و درست (Symfony 6+):
use Symfony\Component\Routing\Attribute\Route;
#[Route('/profile', name: 'user_profile')]
public function profile(): Response
{
// ...
}
اگر هنوز از Annotation استفاده میکنید، حتماً پکیج زیر را نصب کنید:
composer require doctrine/annotations
روش ۴: بررسی متد HTTP
مثال اشتباه:
#[Route('/login', name: 'app_login', methods: ['POST'])]
اما شما با GET درخواست میفرستید → خطای No route found for GET
راهحل:
#[Route('/login', name: 'app_login', methods: ['GET', 'POST'])]
یا در Twig فرم را درست بفرستید.
روش ۵: مشکل _locale در پروژههای چندزبانه
اگر روت شما این شکلی است:
#[Route('/{_locale}/profile', requirements: ['_locale' => 'en|fa|fr'])]
اما URL را بدون locale میزنید → خطا میدهد.
راهحل:
- یا
_localeرا optional کنید:
#[Route('/{!_locale}/profile', requirements: ['_locale' => 'en|fa'], defaults: ['_locale' => 'fa'])]
- یا همیشه locale را بفرستید:
{{ path('user_profile', {'_locale': 'fa'}) }}
روش ۶: بررسی فایل routes.yaml
اشتباهات رایج در config/routes.yaml:
admin_dashboard:
path: /admin/dashboard
controller: App\Controller\AdminController::dashboard
# methods: GET ← اگر ننویسید، فقط GET مجاز است!
درست:
admin_dashboard:
path: /admin/dashboard
controller: App\Controller\AdminController::dashboard
methods: ['GET', 'POST']
روش ۷: پاک کردن کش بعد از نصب پکیج جدید
بعد از نصب هر Bundle جدید (مثل EasyAdmin، API Platform و …) حتماً کش را پاک کنید:
php bin/console cache:clear
php bin/console router:match /admin # برای تست
روش ۸: دیباگ سریع با دستور router:match
بهترین ابزار برای پیدا کردن مشکل:
php bin/console router:match /admin/dashboard
خروجی:
- اگر روت پیدا شد → مشکل از نام یا کش است
- اگر پیدا نشد → روت اصلاً لود نشده
چکلیست ۳۰ ثانیهای رفع خطای No route found

| قدم | دستور یا کار | انجام شد؟ |
|---|---|---|
| 1 | php bin/console cache:clear | |
| 2 | php bin/console debug:router | |
| 3 | نام روت در Twig دقیقاً با خروجی مطابقت دارد؟ | |
| 4 | از Attribute استفاده کردهاید (نه Annotation)؟ | |
| 5 | متد HTTP درست است؟ | |
| 6 | _locale را فراموش نکردهاید؟ |
اگر هر ۶ مورد را چک کردید و هنوز مشکل داشتید، کامنت بگذارید تا دقیق راهنمایی کنم!
سوالات متداول (FAQ)
۱. چرا با وجود تعریف روت همچنان خطای “No route found” میده؟
معمولاً به خاطر کش قدیمی یا اشتباه در نام روت است.
۲. تفاوت No route found و Route not defined چیست؟
- No route found → روت وجود دارد اما با درخواست شما مطابقت ندارد
- Route not defined → اصلاً چنین نام روتی تعریف نشده
۳. چطور کش روت را در سرور تولید (production) پاک کنیم؟
rm -rf var/cache/prod/*
php bin/console cache:warmup --env=prod
۴. آیا در Symfony 7 هنوز میتوان از Annotation استفاده کرد؟
بله، اما باید doctrine/annotations را نصب کنید. توصیه رسمی: از Attribute استفاده کنید.
۵. خطای No route found for GET بعد از migrate به Symfony 7
معمولاً به خاطر تغییر پیشفرض متدها یا کش است. کش را پاک کنید و از Attribute استفاده کنید.
۶. چطور بفهمم کدام روتها لود شدهاند؟
php bin/console debug:router --show-controllers
۷. چرا در dev کار میکند اما در prod خطا میدهد؟
به خاطر کش! همیشه در prod کش را پاک کنید.
۸. آیا مشکل از Apache یا Nginx میتواند باشد؟
بله! مطمئن شوید .htaccess یا rewrite rules درست تنظیم شده باشد.

نظرات