所以我面临的问题是,我无法在routing.yml中配置的重定向中使用通配符
homepage:
path: /test/{wildcard}
controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
defaults:
path: /{wildcard}
permanent: true
在默认路径中,我需要获取通配符路径。因此,例如test / wildcard应该重定向到/ wildcard。 但是Symfony所做的是将其重定向到/ {wildcard}。 那么如何获取通配符参数?
答案 0 :(得分:0)
因此,为了回答我的问题。
解决方案如下:
您需要创建一个自定义RedirectController
,它可以处理
路由内的通配符。
这是控制器的外观:
<?php
namespace Custom\RedirectBundle\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
class RedirectController
{
public function urlRedirectAction(
Request $request,
bool $permanent = false,
string $route = '',
array $dynamicRoutePath =
[]
): RedirectResponse {
$statusCode = $permanent ? 301 : 302;
if ('' !== $route) {
$url = "/".$route;
if (!empty($dynamicRoutePath)) {
$url = $this->getPath($request, $dynamicRoutePath, $url);
}
return new RedirectResponse($url, $statusCode);
}
$route = $this->getPath($request, $dynamicRoutePath);
return new RedirectResponse($route, $statusCode);
}
private function getPath(Request $request, array $path, string $url = ''): string
{
foreach ($path as $pathParameter) {
$pathconfig = $request->get($pathParameter);
$url = $url."/".$pathconfig;
}
return $url;
}
}
routing.yml中的配置:
magazin_category_slug:
path: /magazin/{category}/{slug}
controller: CustomRedirectBundle:Redirect:urlRedirect
defaults:
permanent: true
route: newBaseRoute
dynamicRoutePath:
- category