В процессе портирования модуля с
Drupal 7 на
Drupal 8 обнаружил что внутри файла
routing.yml, в котором указываются обработчики (callback) и соответствующие им пути (routes), есть ключи, которые не используются
Symfony, а являются чистой имплементацией
Drupal.
Внутри метода
SpecialAttributesRouteSubscriber::alterRoutes() создается массив специальных значений, которые зарезервированы
Drupal:
- _system_path
- _maintenance
- _legacy
- _authentication_provider
- _raw_variables
- RouteObjectInterface::ROUTE_OBJECT
- RouteObjectInterface::ROUTE_NAME
- _content
- _form
Ну отсюда хотя бы можно сделать вывод, какие еще дополнительные ключи можно использовать внутри файла
routing.yml - своего модуля.
Изучать каждое значение не было необходимости, меня интересовал только ключ
'_content' - поскольку многие пути (routes) внутри системных модулей
Drupal используют его и при этом не указывают ключ
'_controller', который используется
Symfony для вызова нужного обработчика (callback) при обработке запроса...
Оказалось, что если Вы в своем модуле указываете данный ключ,
Drupal автоматически дополняет ваш роут, добавляя
$defaults['_controller'] = $this->types[$type] внутри метода
ContentControllerEnhancer::enhance(). Так что никакой магии, просто ловкость
Drupal.
Заметка: меню пересобирается в Drupal/Core/Routing/RouterBuild::rebuild()