【发布时间】:2019-07-09 11:10:05
【问题描述】:
所以我面临的问题是,我无法在 routing.yml 中配置的重定向中使用通配符
homepage:
path: /test/{wildcard}
controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
defaults:
path: /{wildcard}
permanent: true
在默认路径中,我需要获取通配符路径。所以例如测试/通配符应该重定向到/通配符。 但 Symfony 所做的是,它重定向到 /{wildcard}。 那么如何获取通配符参数呢?
【问题讨论】:
-
问题是,
defaults:下的path: /{wildcard}不支持通配符,而是将其读取为 RedirectController 使用的文字值。您可以创建自己的 RedirectController 来读取操作路径中作为参数提供的通配符,并使用它来动态确定目标路径而不是指定它。原来的redirectAction可以作为参考。 -
是的,你是对的。所以为了解决这个问题,我自己创建了一个控制器,并将其用作上面配置中控制器参数中的参数。为了在控制器中获取通配符参数,我这样做了:
$request->get('wildcard') -
您也可以直接将其添加到方法签名中:
public function redirect(string $wildcard) { ... }或使用$request->query->get('wildcard')使用$request->get()可能会令人惊讶,因为it looks at different parameter bags in a specific order。这里可能没什么大不了的,但它有助于防止奇怪的副作用并被推荐(参见 docblock)。 -
嗯,不要认为将通配符添加到函数签名中是可能的,因为 symfony 无法将通配符参数解析为来自 url 的给定路径。如果将 /{wildcard} 添加到签名中,它只是将其作为参数传递,而不是实际值。或者你知道如何在配置中获取给定的通配符路径吗?