Routing в Drupal 8

В процессе портирования модуля с 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()
comments powered by Disqus