Drupal 8. О маршрутах и контроллерах

Drupal 8. О маршрутах и контроллерах

Итак, что же такое маршрут и контроллер?

Когда вы создаете пользовательскую страницу в Drupal с кодом, вам нужны и маршрут, и контроллер. Вы определяете URL для страницы с маршрутом. А затем вы создаете контроллер для этой страницы. Это нужно для создания и возврата контента на странице.

Маршруты

Маршрут определяет, какой код должен быть запущен для генерации ответа при запросе URI. Это делается путем сопоставления URI с классом и методом контроллера. Это определяет, как Drupal работает с конкретным URI.

Маршруты хранятся в файле YAML в корне модуля и используют следующее соглашение об именах:

modulename.routing.yml

Вот пример:

hello.content:
path: '/hello'
defaults:
_controller: 'Drupal\hello\Controller\HelloController::content'
_title: 'Hello world'
requirements:
_permission: 'access content'

Название маршрута – hello.content. Путь / hello, который является зарегистрированным путем URL. Поэтому, когда пользователь заходит на сайт sitename.com/hello, этот маршрут решает, какой код следует запустить для генерации ответа.
Затем у нас есть две конфигурации по умолчанию, контроллер и заголовок.
Контроллер сообщает Drupal, какой метод вызывать, когда кто-то переходит на URL-адрес страницы (который определен в маршруте).
Давайте внимательнее посмотрим на путь, включенный в _controller .
‘Drupal\hello\Controller\FirstController::content’
Он состоит из класса пространств имен, двойного двоеточия, а затем метода для вызова.

Контроллеры

Контроллеры принимают запросы или информацию от пользователя и решают, как обработать запрос. Например, контроллер отвечает за генерацию контента (сообщение «Hello world») и возврат его для страницы.
Контроллер, который возвращает простое сообщение Hello world, выглядит следующим образом:

<?php
/**
* @file
* Contains \Drupal\hello\Controller\HelloController.
*/
namespace Drupal\hello\Controller;
use Drupal\Core\Controller\ControllerBase;
class HelloController extends ControllerBase {
public function content() {
return array(
'#type' => 'markup',
'#markup' => t('Hello world'),
);
}
}

Контроллер возвращает визуализируемый массив с «Hello world». Так что, если вы перейдете по пути / hello, вы получите страницу
Drupal с сообщением Hello world.
Собираем все это вместе
Чтобы увидеть это в действии объедините все это в новом модуле.
1. В каталоге / module создайте каталог с именем hello
2. Создайте hello.info.yml в корне каталога hello
3. Добавьте следующее в hello.info.yml :

name: Hello
description: An experimental module to build our first Drupal 8 module
package: Custom
type: module
version: 1.0
core: 8.x

4. Создайте каталог внутри каталога модуля hello с именем src, что сокращенно от source
5. Создайте каталог в src под названием Controller
6. В каталоге Controller создайте файл с именем HelloController.php
7. Добавьте следующее в HelloController.php :

<?php
/**
* @file
* Contains \Drupal\hello\Controller\HelloController.
*/
namespace Drupal\hello\Controller;
use Drupal\Core\Controller\ControllerBase;
class HelloController extends ControllerBase {
public function content() {
return array(
'#type' => 'markup',
'#markup' => t('Hello world'),
);
}
}

8. Создайте файл с именем hello.routing.yml в корне каталога модуля hello
9. Добавьте следующий код в hello.routing.yml :

hello.content:
path: '/hello'
defaults:
_controller: 'Drupal\hello\Controller\HelloController::content'
_title: 'Hello world'
requirements:
_permission: 'access content'

10. Включить модуль hello
11. Посетите / hello, чтобы увидеть сообщение Hello world

Рекомендуется выполнять эти шаги вручную, когда вы впервые изучаете концепцию разработки на Drupal 8, но вы можете сэкономить время, используя консоль Drupal для создания большей части кода из вышеуказанных этапов.

 

Статья была полезной? Поделитесь с друзьями!
Метки: