Как подключать внешние источники маршрутизации

Дата обновления перевода 2023-07-06

Как подключать внешние источники маршрутизации

Простые прилоения могут определять все свои маршруты в одном файле конфигурации - обычно config/routes.yaml (см. ). Однако, в большинстве приложений распространено импортирование определений маршрутов из разных источников: PHP аннотаций в файлах контроллера, файлов YAML или XML, хранящихся в каком-то каталоге и т.д.

Это можно сделать, импортировав источники маршрутизации из главного файла маршрутизации:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# config/routes.yaml
app_file:
    # загружает маршруты из заданного файла маршрутизации, хранящегося в каком-то пакете
    resource: '@AcmeOtherBundle/Resources/config/routing.yml'

app_annotations:
    # загружает маршруты из PHP аннотаций контроллеров, найденных в этом каталоге
    resource: '../src/Controller/'
    type:     annotation

app_directory:
    # загружает маршруты из файлов YAML или XML, найденных в этом каталоге
    resource: '../legacy/routing/'
    type:     directory

app_bundle:
    # загружает маршруты из файлов YAML или XML, найденных в каком-то каталоге пакета
    resource: '@AppBundle/Resources/config/routing/public/'
    type:     directory

Note

При импортировании ресурсов из YAML, ключ (например, app_fil) бесполезен. Просто убедитесь в том, что он уникален, чтобы другие строки его не переопределяли.

Добавление префиксов к URL импортированных маршрутов

Вы также можете выбрать предоставить "префикс" для импортированных маршрутов. Например, представьте, что вы хотите добавить ко всем маршрутам приложения префикс /site (например, /site/blog/{slug} вместо /blog/{slug}):

1
2
3
4
5
6
7
8
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

/**
 * @Route("/site")
 */
class DefaultController
{
    // ...
}

Пусть каждого загружаемого маршрута из нового источника маршрутизации теперь будет иметь префикс в виде строки /site.

Добавление префиксов к именам импортированных маршрутов

У вас также есть возможность добавлять префикс к именам всех маршрутов, определённых в классе контроллера или импортированных из файла конфигурации:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use Symfony\Component\Routing\Annotation\Route;

/**
 * @Route(name="blog_")
 */
class BlogController extends Controller
{
    /**
     * @Route("/blog", name="index")
     */
    public function indexAction()
    {
        // ...
    }

    /**
     * @Route("/blog/posts/{slug}", name="post")
     */
    public function showAction(Post $post)
    {
        // ...
    }
}

В этом примере, имена маршрутов будут blog_index и blog_post.

4.1

Опция добавления префикса к именам маршрутов в файлах YAML, XML и PHP была представлена в Symfony 4.1. Ранее эту функцию поддерживала только аннотация @Route().

Добавление требования хоста к импортированным маршрутам

Вы можете установить регулярное вырежние хоста на импортированных маршрутах. Чтобы узнать больше, смотрите Как сделать так, чтобы маршрут соответствовал на основании хоста.