Поиск…


Вступление

Маршрут похож на сопоставление URL-адреса с действием (функцией) в классе контроллера. Следующий раздел будет посвящен созданию маршрутов, передаче параметров классу Controller через маршрут либо с использованием YAML, либо с помощью аннотации.

замечания

Полезно узнать, что генерируется платформой Symfony, и предоставляет инструменты для просмотра всех маршрутов конкретного приложения.

Из Symfony Doc используйте (в оболочке):

php bin/console debug:router

Кроме того, вы можете просмотреть информацию о всех соответствующих маршрутах в профилировщике Framework в меню маршрутизации: Symfony Profiler

Маршрутизация с использованием 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
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow