В Drupal 8 внесено множество изменений основным направлением которых есть применение Symphony 2 как базового фреймворка
В этой серии статей будет движение от простого к сложному. Итак начнем с создания простого модуля , пункта меню и страницы к нему.
И так начнем.
Первое что необходимо сделать - сосздать кастом модуль.
В Drupal 8 изменилось правильное расположение custom модулей если в Drupal 7 кастом модули надо было располагать /sites/all/modules/ то в Drupal 8 ядро перенесли в папку core и теперь кастомный модули необходимо располагать в /modules/ для разделения кастом и контриб модулей внутри папки /modules принять создавать папку /modules/contrib для контриб модулей и /modules/custom для кастом
Кроме того в drupal 8 поменялся формат info файла модуля
Создаем папку модуля
mkdir -p modules/custom/mymodule
Заходим в нее и создаем info файл модуля
d7 вариант (название файла mymodule.info)
name = mymodule
description = mymodule module description
package = custom
core = 7.x
d8 вариант (название файла mymodule.info.yml)
name: mymodule
type: module
description: "MyModule description."
package: Custom
version: 1.0
core: 8.x
tags:
- custom
- dev
hidden: false
Создаем файл mymodule.module с следующим содержимым
function cp_menu() {
$items['cp/domains'] = array(
'title' => t('Domains'),
'type' => MENU_CALLBACK,
'route_name' => 'cp_domains',
'access arguments' => array('use panel'),
);
return $items;
}
function cp_permission() {
$permissions = array(
'use panel' => array(
'title' => t('Useing panel'),
'description' => t('Useing hosting control panel.'),
),
);
return $permissions;
}
создаем mymodule.routing.yml со следующим содержимым
cp_domains:
pattern: '/cp/domains'
defaults:
_content: '\Drupal\cp\Controller\CpController::domains'
requirements:
_permission: 'use panel'
находясь в папке модуля делаем папку для контроллера и переходим в нее
mkdir -p lib/Drupal/cp/Controller
cd lib/Drupal/cp/Controller
создаем файл mymoduleController.php с классом контроллера
/**
* @file
* Contains \Drupal\thrones\ThronesController.
*/
namespace Drupal\cp\Controller;
use Symfony\Component\DependencyInjection\ContainerAware;
class CpController extends ContainerAware {
public function domains() {
return 'Game of thrones is soo awesome!';
}
}