页面包含此路由:<a href={{ path('app_gut_food_vector') }}>
,但触发了not found by the @ParamConverter annotation
错误。日志显示如下:Matched route "app_gut_show".
。我不明白这怎么可能。我的问题是:如何匹配正确的路线?
拼图的碎片:
日志条目:
INFO 23:53:50 request Matched route "app_gut_show".
{
"route": "app_gut_show",
"route_parameters": {
"_route": "app_gut_show",
"_controller": "App\\Controller\\GutController::show",
"id": "vector"
},
"request_uri": "http://diet/gut/vector",
"method": "GET"
}
模板包括:
Click <a href={{ path('app_gut_food_vector') }}> here</a>
控制器包括:
#[Route('/vector', name: 'app_gut_food_vector', methods: ['GET', 'POST'])]
public function vector(Request $request, GutRepository $gutRepository, VectorService $vectorSvc)
{
...
}
debug:router
包括:
app_gut_index GET ANY ANY /gut/
app_gut_new GET|POST ANY ANY /gut/new
app_gut_show GET ANY ANY /gut/{id}
app_gut_edit GET|POST ANY ANY /gut/{id}/edit
app_gut_delete POST ANY ANY /gut/{id}
app_gut_food_vector ANY ANY ANY /gut/vector
和不正确匹配的路由:
#[Route('/{id}', name: 'app_gut_show', methods: ['GET'])]
public function show(Gut $gut): Response
{
...
}
注意:从vector
方法中删除方法并不能防止不匹配。
2条答案
按热度按时间czq61nw11#
根据您使用的symfony版本,您可以尝试定义路由优先级。
如果您使用的是5.1之前的版本,请尝试将注解移动到yaml文件,并定义高于
/gut/{id}
route的/gut/vector
route对于更高版本view Symfony doc
jaql4c8m2#
我觉得你在搞什么路线指令。
事实上,
/gut/vector
也匹配/gut/{id}
,因为正则表达式用于匹配路由。我认为您应该以其他顺序声明您的路由(因此控制器方法)以避免这种冲突。
或者,你可以明确地要求
id
是一个整数(如果它是一个整数;如果它是UUID,则应该坚持使用UUID格式)。