Роутинг Drupal 8. Прощай hook_menu.

Опубликовано: 18.10.2017

Один из самых используемых хуков Drupal 7 – это, конечно же, hook_menu. Его реализация имеется в любом мало-мальски серьёзном модуле. Функционал, которым управлял данный хук, был поистине огромен. С его помощью можно было объявлять страницы, вкладки, контекстные ссылки, устанавливать обработчики, управлять доступом и многое другое. С приходом Drupal 8 данный хук более не нужен и система роутинга теперь базируется на компонентах Symfony (перед изучением роутинга Drupal 8 я бы рекомендовал ознакомиться с документацией роутинга в Symfony ). При первом знакомстве данная система может вызывать отторжение и ощущение запутанности у прожжённого фаната Drupal 7. Однако, при более подробном рассмотрении приходит понимание того, что новая система гораздо удобнее, и возвращаться к hook_menu больше не хочется.

 

Статичные маршруты

Начнём с простого – определение статичного маршрута. Для этого в Drupal 7 нужно было написать следующий код внутри своего модуля:

function example_menu ( ) { $items = array ( ) ; $items [ 'example_page' ] = array ( 'title' => 'Example Page' , 'page callback' => example_page , 'access arguments' => array ( 'access content' ) , ) ; return $items ; }

В Drupal 8 для описания роутов используется формат YAML. Информация о роутах модуля, в том числе статических, содержится в файле MODULE_NAME.routing.yml. Важно (!) отметить, что в YAML файлах рекомендуется использовать одинарные кавычки. Использование двойных кавычек может привести к непредсказуемым последствиям. Каждый маршрут описывается отдельно и обязательно должен иметь следующие параметры:

rss