Создание страницы в модуле Drupal программно
Существует два шага в создании простой страницы в Drupal:
Объявите путь и его параметры.
Этот шаг включает заголовок страницы, требования к доступу к странице и др.
В Drupal 7 вы должны были реализовать hook_menu ().
В Drupal 8 создайте файл <module_name>.routing.yml в каталоге модулей верхнего уровня.
Напишите код для возврата тела страницы.
В Drupal 7 вы должны были написать функцию обратного вызова страницы, указанную в hook_menu ().
В Drupal 8 обратный вызов страницы должен быть либо методом класса, либо зарегистрированным сервисом. Он может отличаться в зависимости от различных условий (HTTP или HTTPS, заголовки содержимого и т. Д.), Но это выходит за рамки данного введения.
Прохождение
Следуя примеру на этой странице, вы сможете создать простую страницу в своем пользовательском модуле, не узнавая больше о внутренностях Drupal. Для получения более подробной информации см. Запись изменений для изменения системы маршрутизации и различных реализаций в ядре и в примерах проекта.
Маршрутизация YAML-файла для примера модуля
Информация о маршрутизации хранится в example/example.routing.yml:
example.my_page: path: '/mypage/page' defaults: _controller: '\Drupal\example\Controller\ExampleController::myPage' _title: 'My first page in D8' requirements: _permission: 'access content'
example.my_page
- Это машинное имя роута. По соглашению машинные имена роутов должны быть module_name.sub_name. Когда другие части кода должны ссылаться на роут, они будут использовать машинное имя.
path
- Это дает путь к странице на вашем сайте. Обратите внимание на начальный слеш (/).
defaults
- Это описывает обратные вызовы страницы и заголовка. @todo: Где эти значения по умолчанию могут быть отменены?
requirements
- Это определяет условия, при которых страница будет отображаться. Вы можете указать разрешения, модули, которые должны быть включены, и другие условия.
Реализация страницы для примера модуля
Класс Controller ExampleController должен быть определен в example/src/Controller/ExampleController.php:
<?php namespace Drupal\example\Controller; use Drupal\Core\Controller\ControllerBase; /** * Provides route responses for the Example module. */ class ExampleController extends ControllerBase { /** * Returns a simple page. * * @return array * A simple renderable array. */ public function myPage() { $element = array( '#markup' => 'Hello, world', ); return $element; } }
пространство имен (namespace)
- Здесь объявляется префикс, необходимый для полного определения имени класса, который мы определяем. Сравните блок документа и имя класса. Автозагрузчик класса знает, что для поиска класса \Drupal\example\Controller\ExampleController он должен найти файл modules/example/src/Controller/ExampleController.php.
use
- Это позволяет нам использовать ControllerBase вместо полностью определенного имени. Это делает нашу строку class намного проще для чтения.
myPage()
- Метод, указанный в файле YAML, должен быть открытым. Он должен возвращать визуализируемый массив.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.