symfony 为什么此路由不匹配?

wkyowqbh  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(132)

页面包含此路由:<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方法中删除方法并不能防止不匹配。

czq61nw1

czq61nw11#

根据您使用的symfony版本,您可以尝试定义路由优先级。
如果您使用的是5.1之前的版本,请尝试将注解移动到yaml文件,并定义高于/gut/{id} route的/gut/vector route
对于更高版本view Symfony doc

jaql4c8m

jaql4c8m2#

我觉得你在搞什么路线指令。
事实上,/gut/vector也匹配/gut/{id},因为正则表达式用于匹配路由。
我认为您应该以其他顺序声明您的路由(因此控制器方法)以避免这种冲突。
或者,你可以明确地要求id是一个整数(如果它是一个整数;如果它是UUID,则应该坚持使用UUID格式)。

相关问题