Symfony3 - 正常路由被解释为具有 parameters/slugs 的路由
Symfony3 - normal route is interpreted as a route with parameters/slugs
我在我的应用程序中定义了以下路由:
-------------------------- ---------- -------- ------ -----------------------------------
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
通过浏览器访问路由 profile_show
时,探查器会告诉我它会尝试访问路由 pub_event
,就好像我在浏览器中输入了 /{id}/{guestid}
一样。
是不是我做错了什么让它选择正确的路线和正确的控制器和方法?
您需要将您的路线 pub_event
移动到 routing.yml
中导入路线的末尾。
这是正常行为,因为 /sec/profile
匹配 /{id}/{guestid}
。好的做法是在 routing.yml
文件末尾加载通用路由。
您可以做的另一件事是在 pub_event
路由中设置对 id
参数的要求。
有了注释,它应该是这样的:
/**
* @Route("/{id}/{guestid}", requirements={"id" = "\d+"}, defaults={"id" = 1})
*/
记住"Earlier Routes always Win"。在 Symfony Routing 书中阅读更多关于要求的信息:http://symfony.com/doc/current/book/routing.html#adding-requirements
我在我的应用程序中定义了以下路由:
-------------------------- ---------- -------- ------ -----------------------------------
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
通过浏览器访问路由 profile_show
时,探查器会告诉我它会尝试访问路由 pub_event
,就好像我在浏览器中输入了 /{id}/{guestid}
一样。
是不是我做错了什么让它选择正确的路线和正确的控制器和方法?
您需要将您的路线 pub_event
移动到 routing.yml
中导入路线的末尾。
这是正常行为,因为 /sec/profile
匹配 /{id}/{guestid}
。好的做法是在 routing.yml
文件末尾加载通用路由。
您可以做的另一件事是在 pub_event
路由中设置对 id
参数的要求。
有了注释,它应该是这样的:
/**
* @Route("/{id}/{guestid}", requirements={"id" = "\d+"}, defaults={"id" = 1})
*/
记住"Earlier Routes always Win"。在 Symfony Routing 书中阅读更多关于要求的信息:http://symfony.com/doc/current/book/routing.html#adding-requirements