Symfony 4 无自定义控制器重定向:通配符参数传递问题
解决Symfony路由重定向中通配符参数无法传递的问题
我之前也踩过这个坑!你遇到的问题根源在于Symfony的RedirectController::urlRedirectAction对path参数的处理方式——直接写path: /{wildcard}的话,它会把{wildcard}当成字面量字符串,而不是去捕获路由里的实际参数值。
下面给你两种可行的解决方案,按需选择:
方案1:用表达式语言传递参数(直接URL重定向)
修改你的routing.yml配置,在path值里使用Symfony的表达式语言来拼接目标URL,这样就能正确引用路由中的wildcard参数了:
homepage: path: /test/{wildcard} controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction defaults: path: '= "/" ~ wildcard' permanent: true
这里的'= "/" ~ wildcard'是关键:等号告诉Symfony这是一个表达式,~是字符串拼接运算符,会把路由捕获到的wildcard参数值拼接到/后面,实现你要的/test/xxx → /xxx的重定向。
方案2:基于路由名称重定向(更符合Symfony最佳实践)
如果你的目标路径本身对应一个已定义的路由,推荐用这种方式,它更灵活,后期维护也更方便:
首先定义目标路由(如果还没定义的话):
target_route: path: /{wildcard} controller: App\Controller\YourTargetController::yourAction # 替换成你实际的控制器逻辑
然后修改重定向路由,改用redirectAction并指向目标路由名称:
homepage: path: /test/{wildcard} controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction defaults: route: target_route permanent: true
这种方式下,Symfony会自动把当前路由的wildcard参数传递给目标路由,不需要额外处理,而且以后如果目标URL需要修改,只需要调整target_route的path即可,不用改动重定向配置。
内容的提问来源于stack exchange,提问作者Syerad
相关产品推荐
相关产品推荐

