Как подключать внешние источники маршрутизации
Дата обновления перевода 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()
.
Добавление требования хоста к импортированным маршрутам
Вы можете установить регулярное вырежние хоста на импортированных маршрутах. Чтобы узнать больше, смотрите Как сделать так, чтобы маршрут соответствовал на основании хоста.