Как сконфигурировать перенаправление без пользовательского контроллера¶
Иногда URL'у может понадобиться перенаправление на другой URL. Вы можете сделать
это создав новое действие контроллера, единственной задачей которого будет перенаправление,
но использовать RedirectController
пакета FrameworkBundle даже легче.
Вы можете перенаправлять по определённому пути (например, /about
) или по определённому
маршруту, используя его имя (например, homepage
).
Перенаправление с использованием пути¶
Представьте, что не существуем контроллера по умолчанию для пути /
вашего приложения,
и вы хотите перенаправить эти запросы на /app
. Вам нужно будет использовать действие
urlRedirectAction()
,
чтобы перенаправить по этому новому URL:
- YAML
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
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<!-- config/routes.xml --> <?xml version="1.0" encoding="UTF-8" ?> <routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> <!-- загрузить какие-то маршруты - один должен обязательно иметь путь "/app" --> <import resource="../src/Controller/" type="annotation" prefix="/app" /> <!-- перенаправление домашней страницы --> <route id="homepage" path="/"> <default key="_controller">Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction</default> <default key="path">/app</default> <default key="permanent">true</default> </route> </routes>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// config/routes.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; $collection = new RouteCollection(); // загрузить какие-то маршруты - один должен обязательно иметь путь "/app" $appRoutes = $loader->import("../src/Controller/", "annotation"); $appRoutes->setPrefix('/app'); $collection->addCollection($appRoutes); // перенаправление домашней страницы $collection->add('homepage', new Route('/', array( '_controller' => 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction', 'path' => '/app', 'permanent' => true, ))); return $collection;
В этом примере, вы сконфигурировали маршрут для пути /
и позволили
RedirectController
перенаправить его на /app
. Переключатель permanent
сообщает действию выдать статус-код HTTP 301
вместо статус-кода HTTP 302
,
установленного по умолчанию.
Перенаправление с использованием маршрута¶
Представьте, что вы переносите ваш веб-сайт с WordPress на Symfony, и вы хотите
перенаправить /wp-admin
по маршруту sonata_admin_dashboard
. Вы не знаете
пути, только имя маршрута. Этого можно достичь, используя действие
redirectAction()
:
- YAML
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
- XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<!-- config/routes.xml --> <?xml version="1.0" encoding="UTF-8" ?> <routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> <!-- ... --> <route id="admin" path="/wp-admin"> <default key="_controller">Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction</default> <default key="route">sonata_admin_dashboard</default> <default key="permanent">true</default> </route> </routes>
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// config/routes.php use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; $collection = new RouteCollection(); // ... $collection->add('admin', new Route('/wp-admin', array( '_controller' => 'Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction', 'route' => 'sonata_admin_dashboard', 'permanent' => true, ))); return $collection;
Caution
Так как вы перенаправляете к корню, а не к пути, обязательная опция
в действии redirect()
называется route
, вместо опции path
в действии urlRedirect()
.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.