Реліз Drupal 8 відбувся і тепер, є сенс детальніше розглядати дану систему. Всі нововведення самого движка, ми природно тут не будемо розглядати, а перейдемо відразу до практики. Одним з важливих моментів для розробників, є написання кастомних модулів, бо жоден більш-менш складний проект не обходиться без написання своїх модулів.
Приступимо. Почнемо з файлової структури. Тепер, все кастомниє модулі повинні знаходитися по шляху:
Мій модуль буде називатися як - my_module. Створюємо папку з ім'ям my_module по шляху зазначеному вище. Сама назва файлів, так само зазнало змін.
Створимо файл в корені нашого модуля - my_module.info.yml. Як ви могли здогадатися, даний файл прийшов на зміну - my_module.info з 7 гілки, але він так само несе в собі лише описи для модуля. У моєму випадку - даний файл виглядає так:
Тут особливо розповідати нічого, з файлу зрозуміло, що за що відповідає. Після створення даного файлу, ми можемо побачити наш модуль на сторінці модулів:
Який, ми природно активуємо.
Хочу зауважити, що тепер не можна відключити модуль. Є тільки два стани, встановити і видалити.
Природно, після активації модуля ми не побачимо нічого, крім галочки навпроти нашого модуля, яка позначає, що він встановлений. Тепер переходимо до створення сторінки. В Drupal 8 ми тепер не можемо визначити hook_menu і створити нову сторінку на сайті. На зміну йому прийшли роутинг (routing [маршрути]) в форматі yml.
Створимо файл my_module.routing.yml в корені нашого модуля. Даний файл служить для опису маршруту за базовим шаблоном. Як параметри маршруту виступають такі значення як:
- заголовок сторінки
- URL сторінки
- котроллер
- Права доступу
- І т.д.
У нашому випадку, цих параметрів буде достатньо, що б описати сторінку.
Кожна назва роутінга має бути унікальне (my_module.routing). Список параметрів:
- path - URL майбутньої сторінки
- defaults - містить значення за замовчуванням. Всі значення розпочинаються з префіксів «_»
- _title - Заголовок сторінки
- _controller - шлях до контролера, де далі вказуються клас і метод контролера (MyModuleController :: test)
- requirements - містить значення залежностей. Всі значення так само починаються з префіксів «_»
- _permission - визначає доступ до сторінки, в нашому випадку «Для всіх користувачів, які мають право переглядати контент»
Хочу зауважити, що в ранніх версіях Drupal 8 використовувався «_content», замість «_controller». Переконайтеся, що ви використовуєте стабільну версію Drupal 8.
З маршрутами визначилися. Тепер займемося самим контролером, який ми вказали в параметрі «_defaults» значення «_controller».
Всі контролери модуля повинні знаходитися по шляху
Створіть необхідні папки всередині вашого модуля.
Далі, створюємо файл контролера. Файл береться з значення «_controller» в файлі my_module.routing.yml. У нашому випадку файл буде називатися, як MyModuleController.
Створимо файл MyModuleController.php в корені папки Controller. Тепер, як ви могли помітити, ми маємо справу з ООП. В даному файлі нам необхідно визначити наш клас MyModuleController і його метод test. Назви класу і методу, ми так само забираємо з файлу my_module.routing.yml. У нашому випадку, даний файл виглядає так:
Хочу зауважити, що метод test повинен завжди віддавати масив.
Так само ми використовували namespace. не варто забувати про нього, якщо не хочете отримати проблеми в майбутньому. Якщо хто не знає, дозволяє нам позбутися від 2х однаково іменованих класів.
З контролером ми так само визначилися. Тепер чистимо кеш сайту, переходимо по шляху
Тепер, нам залишилося додати пункт меню в основне меню сайту. Для цього, в корені нашого модуля, створимо файл my_module.links.menu.yml. в якому ми і будемо описувати пункт меню. У нашому випадку, даний файл буде виглядати так:
- title - назва пункту меню
- description - Опис пункту меню
- menu_name - ім'я меню, до якого хочемо додати пункт меню
- route_name - ім'я роутінга, до якого буде прив'язаний даний пункт меню
- weight - вага пункту меню
Як ми бачимо, з поставленим завданням ми впоралися. Система написання модулів досить ускладнилася, але тим не менш стала більш гнучкою і нарешті ми можемо використовувати усіма нами улюблений підхід ООП.