Как сконфигурировать перенаправление без пользовательского контроллера
Дата обновления перевода 2023-07-14
Как сконфигурировать перенаправление без пользовательского контроллера
Иногда URL'у может понадобиться перенаправление на другой URL. Вы можете сделать это создав новое действие контроллера, единственной задачей которого будет перенаправление, но использовать RedirectController пакета FrameworkBundle даже легче.
Вы можете перенаправлять по определённому пути (например, /about
) или по определённому
маршруту, используя его имя (например, homepage
).
Перенаправление с использованием пути
Представьте, что не существуем контроллера по умолчанию для пути /
вашего приложения,
и вы хотите перенаправить эти запросы на /app
. Вам нужно будет использовать действие
urlRedirectAction(),
чтобы перенаправить по этому новому URL:
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():
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()
.