Як підключати зовнішні джерела маршрутизації

Дата оновлення перекладу 2023-06-14

Як підключати зовнішні джерела маршрутизації

Прості додатки можуть визначати всі свої маршрути в одному файлі конфігурації - зазвичай 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().

Додавання вимог хоста до імпортованих маршрутів

Ви можете встановити регулярний вираз хоста на імпортованих маршрутах. Щоб дізнатися більше, дивіться .