Symfony 5.0.11路由匹配异常:表单提交始终跳转至通用搜索路由
Symfony 5.0.11 路由跳转异常排查结果
根因定位
Symfony 5.1 之前的版本未提供路由优先级配置,默认按路由定义的从上到下顺序匹配,命中第一个符合规则的路由后直接终止匹配流程,不会遍历所有路由选择最匹配的项。
你当前将无参数的@Route("/global/search/")路由定义在所有带路径参数的/global/*路由之前,所有/global/开头的请求都会优先命中该通用搜索路由,因此永远不会走到后续的@Route("/global/product_code/{product_code}")等专属路由。
适配 5.0.11 版本的解决方案
方案1:调整路由定义顺序
将所有更具体的带参数路由(如产品编码匹配路由)全部移到通用搜索路由的前面定义,加载时会先匹配更具体的路径,未匹配到专属路由的请求才会落到通用搜索逻辑。
规则要求:所有/global/前缀的路由,越具象的路由定义位置越靠前
方案2:修改路径规则规避冲突
如果不方便调整路由定义顺序,可修改通用搜索路由的路径避免前缀冲突,比如调整为/global/search/common,和其他专属路由的路径前缀做明确区分。
方案3:表单提交层前置判断
如果路由路径完全不能修改,可在表单提交的统一处理入口先做字段判断,直接生成对应路由的跳转地址,不依赖自动路由匹配:
- 先校验用户提交的表单字段,如果填写了产品编码,直接调用
$this->redirectToRoute('产品编码路由名', ['product_code' => 提交的参数值])跳转 - 未填写任何专属字段的请求,再跳转到通用搜索路由
内容的提问来源于stack exchange,提问作者Tall_gnome
相关产品推荐
相关产品推荐

