Поиск…
Вступление
Маршрут похож на сопоставление URL-адреса с действием (функцией) в классе контроллера. Следующий раздел будет посвящен созданию маршрутов, передаче параметров классу Controller через маршрут либо с использованием YAML, либо с помощью аннотации.
замечания
Полезно узнать, что генерируется платформой Symfony, и предоставляет инструменты для просмотра всех маршрутов конкретного приложения.
Из Symfony Doc используйте (в оболочке):
php bin/console debug:router
Кроме того, вы можете просмотреть информацию о всех соответствующих маршрутах в профилировщике Framework в меню маршрутизации:
Маршрутизация с использованием YAML
Конфигурация маршрутизации включена в файл app/config/config.yml
, по умолчанию файл app/config/routing.yml
.
Оттуда вы можете связать свою собственную конфигурацию маршрутизации в комплекте
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
Он также может содержать несколько глобальных приложений.
В вашем собственном пакете вы можете настроить маршруты, которые служат двум целям:
- Согласование с запросом, так что для запроса вызывается правильное действие.
- Создание URL-адреса из имени и параметров маршрута.
Ниже приведен пример конфигурации маршрута YAML:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
Маршрут называется my_page
и вызывает myPageAction
DefaultController
в AppBundle
запросу. Он имеет параметр, именованный parameter
со значением по умолчанию. Значение действует только в том случае, если оно соответствует регулярному выражению \d+
. Для этого маршрута принимаются только HTTP-методы GET
и PUT
. condition
является выражением в примере, маршрут не будет соответствовать, если заголовок User-Agent не соответствует firefox. Вы можете использовать любую сложную логику в выражении, используя две переменные, которые передаются в выражение: context
(RequestContext) и request
( request
Symfony).
Сгенерированный маршрут с значением параметра 10 может выглядеть как /application/content/page/10
.
Маршрутизация с использованием аннотаций
Конфигурация маршрутизации включена в файл app/config/config.yml
, по умолчанию файл app/config/routing.yml
.
Оттуда вы можете подключиться к контроллерам с аннотированной конфигурацией маршрутизации:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
В вашем собственном пакете вы можете настроить маршруты, которые служат двум целям:
- Согласование с запросом, так что для запроса вызывается правильное действие.
- Создание URL-адреса из имени и параметров маршрута.
Ниже приведен пример аннотированной конфигурации маршрута:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
Контроллер аннотируется с помощью префиксного маршрута, так что любой сконфигурированный маршрут в этом контроллере будет добавлен с использованием префикса.
my_page
маршрут называется my_page
и вызывает функцию myPageAction
запросу. Он имеет параметр, именованный parameter
со значением по умолчанию. Значение действует только в том случае, если оно соответствует регулярному выражению \d+
. Для этого маршрута принимаются только HTTP-методы GET
и PUT
.
Обратите внимание, что параметр вводится в действие как параметр функции.
Сгенерированный маршрут с значением параметра 10 может выглядеть как /application/content/page/10
.
Мощные маршруты отдыха
Традиционно вы можете использовать маршрутизацию для сопоставления запроса с компонентом маршрутизации, который обрабатывал параметры запроса и ответа с помощью компонента HttpFoundation .
Кроме того, пользовательский параметр маршрута может быть создан с помощью FOSRestBundle для расширения функциональных возможностей по умолчанию для компонента маршрутизации.
Это полезно для создания маршрутов REST, что очень полезно, чтобы указать, как перенаправить структурированные данные, такие как XML или json-файл, в запрос (и ответ).
Дополнительную информацию см. В документе FOSRestBundle Doc , и особенно эту аннотацию:
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/