Symfony 4 Redirect без кастомного контроллера - PullRequest
1 голос
/ 09 июля 2019

, поэтому проблема, с которой я сталкиваюсь, заключается в том, что я не могу использовать подстановочные знаки внутри моих перенаправлений, настроенных в 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 голосов
/ 10 июля 2019

Итак, чтобы дать ответ на мой вопрос. Решение заключается в следующем: Вам нужно создать кастом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...