Як сконфігурувати перенаправлення без користувацького контролера
Дата оновлення перекладу 2023-05-30
Як сконфігурувати перенаправлення без користувацького контролера
Іноді 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()
.