没有自定义控制器的Symfony 4重定向

时间:2019-07-09 11:10:05

标签: php symfony symfony4

所以我面临的问题是,我无法在routing.yml中配置的重定向中使用通配符

homepage:
  path: /test/{wildcard}
  controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
  defaults:
    path: /{wildcard}
    permanent: true

在默认路径中,我需要获取通配符路径。因此,例如test / wildcard应该重定向到/ wildcard。 但是Symfony所做的是将其重定向到/ {wildcard}。 那么如何获取通配符参数?

1 个答案:

答案 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