Как сконфигурировать перенаправление без пользовательского контроллера

Как сконфигурировать перенаправление без пользовательского контроллера

Иногда URL'у может понадобиться перенаправление на другой URL. Вы можете сделать это создав новое действие контроллера, единственной задачей которого будет перенаправление, но использовать RedirectController пакета FrameworkBundle даже легче.

Вы можете перенаправлять по определённому пути (например, /about) или по определённому маршруту, используя его имя (например, homepage).

Перенаправление с использованием пути

Представьте, что не существуем контроллера по умолчанию для пути / вашего приложения, и вы хотите перенаправить эти запросы на /app. Вам нужно будет использовать действие urlRedirectAction(), чтобы перенаправить по этому новому URL:

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# config/routes.yaml

# загрузить какие-то маршруты - один должен обязательно иметь путь "/app"
controllers:
    resource: ../src/Controller/
    type:     annotation
    prefix:   /app

# перенаправление домашней страницы
homepage:
    path: /
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
    defaults:
        path: /app
        permanent: true

В этом примере, вы сконфигурировали маршрут для пути / и позволили RedirectController перенаправить его на /app. Переключатель permanent сообщает действию выдать статус-код HTTP 301 вместо статус-кода HTTP 302 , установленного по умолчанию.

Перенаправление с использованием маршрута

Представьте, что вы переносите ваш веб-сайт с WordPress на Symfony, и вы хотите перенаправить /wp-admin по маршруту sonata_admin_dashboard. Вы не знаете пути, только имя маршрута. Этого можно достичь, используя действие redirectAction():

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
9
10
# config/routes.yaml

# ...

admin:
    path: /wp-admin
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
    defaults:
        route: sonata_admin_dashboard
        permanent: true

Caution

Так как вы перенаправляете к корню, а не к пути, обязательная опция в действии redirect() называется route, вместо опции path в действии urlRedirect().