Routing Symfony3-正常路线被解释为带有参数/段塞的路线

Routing Symfony3-正常路线被解释为带有参数/段塞的路线,routing,routes,slug,symfony,Routing,Routes,Slug,Symfony,我在我的应用程序中定义了以下路线: -------------------------- ---------- -------- ------ ----------------------------------- Name Method Scheme Host Path -------------------------- ---------- -------- ------ ----------------------------

我在我的应用程序中定义了以下路线:

-------------------------- ---------- -------- ------ -----------------------------------
 Name                       Method     Scheme   Host   Path
-------------------------- ---------- -------- ------ -----------------------------------
 _wdt                       ANY        ANY      ANY    /_wdt/{token}
 _profiler_home             ANY        ANY      ANY    /_profiler/
 _profiler_search           ANY        ANY      ANY    /_profiler/search
 _profiler_search_bar       ANY        ANY      ANY    /_profiler/search_bar
 _profiler_info             ANY        ANY      ANY    /_profiler/info/{about}
 _profiler_phpinfo          ANY        ANY      ANY    /_profiler/phpinfo
 _profiler_search_results   ANY        ANY      ANY    /_profiler/{token}/search/results
 _profiler                  ANY        ANY      ANY    /_profiler/{token}
 _profiler_router           ANY        ANY      ANY    /_profiler/{token}/router
 _profiler_exception        ANY        ANY      ANY    /_profiler/{token}/exception
 _profiler_exception_css    ANY        ANY      ANY    /_profiler/{token}/exception.css
 _twig_error_test           ANY        ANY      ANY    /_error/{code}.{_format}
 api_route                  ANY        ANY      ANY    /api
 sec_events_index           GET        ANY      ANY    /sec/events/
 sec_events_new             GET|POST   ANY      ANY    /sec/events/new
 sec_events_show            GET        ANY      ANY    /sec/events/{id}
 sec_events_edit            GET|POST   ANY      ANY    /sec/events/{id}/edit
 sec_guest_delete           ANY        ANY      ANY    /sec/guest/{id}
 sec_events_delete          DELETE     ANY      ANY    /sec/events/{id}
 pub_event                  ANY        ANY      ANY    /{id}/{guestid}
 home_page                  ANY        ANY      ANY    /
 about_page                 ANY        ANY      ANY    /about
 products_route             ANY        ANY      ANY    /products
 sec_guests_new             GET|POST   ANY      ANY    /sec/guests/new
 sec_guests_edit            GET|POST   ANY      ANY    /sec/guests/{id}/edit
 send_invite                ANY        ANY      ANY    /sec/invites
 admin_index                GET        ANY      ANY    /admin/users
 profile_show               ANY        ANY      ANY    /sec/profile
 admin_edit                 GET|POST   ANY      ANY    /admin/{id}/edit
 sec_delete                 DELETE     ANY      ANY    /admin/{id}
 login_route                ANY        ANY      ANY    /login
 login_check                ANY        ANY      ANY    /login_check
 pass_reset                 ANY        ANY      ANY    /reset
 pass_reset_form            ANY        ANY      ANY    /{token}
 test                       ANY        ANY      ANY    /test
 homepage                   ANY        ANY      ANY    /
 logout                     ANY        ANY      ANY    /logout
-------------------------- ---------- -------- ------ -----------------------------------

每当我使用
/sec/profile
通过浏览器访问route
profile\u show
时,探查器会告诉我它试图访问route
pub\u事件
,就好像我在浏览器中键入了
/{id}/{guestid}
一样

我有没有做错什么,让它选择正确的路线以及正确的控制器和方法?

您需要在
routing.yml
中的导入路线末尾移动路线
发布事件

这是正常的行为,因为
/sec/profile
匹配
/{id}/{guestid}
。好的做法是在
routing.yml
文件末尾加载通用路由

您可以做的另一件事是在
pub_event
route中设置
id
参数的要求

对于注释,它应该如下所示:

/**
 * @Route("/{id}/{guestid}", requirements={"id" = "\d+"}, defaults={"id" = 1})
 */

记住“早期路线总是赢”。请阅读Symfony Routing book中关于需求的更多信息:

再强调也不为过。与其像这样将所有路由放在路由文件的末尾(如果使用注释,这可能不起作用),不如对路由设置更严格的要求,以便某些路由可能与其他路由不匹配。我建议将您的
pub_event
路线更改为
/event/{id}/{guestid}
,以获得额外保险和SEO清晰性。在这种情况下是个好主意:)。