Як сконфігурувати перенаправлення без користувацького контролера

Дата оновлення перекладу 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().