Symfony3 - 正常路由被解释为带参数/ slugs的路由

时间:2016-02-19 20:49:48

标签: routing routes slug symfony

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

-------------------------- ---------- -------- ------ -----------------------------------
 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
-------------------------- ---------- -------- ------ -----------------------------------

每当我通过浏览器profile_show访问路由/sec/profile时,探查器会告诉我它尝试访问路由pub_event,就像我在浏览器中键入/{id}/{guestid}一样。

为了让它找到正确的路线和正确的控制器和方法,我有什么不对的吗?

1 个答案:

答案 0 :(得分:2)

您需要在pub_event的导入路径末尾移动路线routing.yml

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

您可以做的其他事情是在id路线中设置pub_event参数的要求。

使用注释看起来应该是这样的:

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

记住"早期路线总是胜利"。阅读更多关于Symfony Routing book中的要求:http://symfony.com/doc/current/book/routing.html#adding-requirements