• урок
  • pantey

Drupal 8 – использование кастомных классов в своем модуле.

26.07.2017

При разработке сложных проектов вы всегда создаете кастомные модули, которые должны решать ту или иную не стандартную задачу, а чем сложнее проект, тем обширнее становится файловая структура вашего модуля. Например, для себя, еще с 7й версии Drupal, я структуру (иерархию) модуля делил по следующему принципу:

module_name
  - src
    -- Entity
      --- Node
      --- Taxonomy
    -- Views
      --- Views_name
    -- Helper
      --- Entity
        ---- HelperNode
        ---- HelperTaxonomy
      --- Views
        ---- HelperViews
      --- Custom
  - module_name.info
  - module_name.module

Данная структура (паттерн) не является идеальной, но меня устраивала в большей его части, в силу того, что все было разбито по категориям, например хуки для нод, находились в файле по пути:

module_name/src/Entity/Node

а для не стандартных функций, использовал класс по шаблону:

nameHelper.php

который находился по пути

module_name/src/Helper/entity_name/nameClass

так, например дополнительные методы для views находились в классе

HelperViews

который находился по пути

module_name/src/Helper/Views/HelperViews

соответственно, файл

module_name.module

использовался только для подключения данных файлов, через

module_load_include()

и в данном файле уже никакой реализации хуков или дополнительных функций не было.

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

Итак, как вы могли понять из текста выше, использование кастомных классов в 7ке реализовывалось отдельным подключением файла класса в структуру модуля.

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

Файл custom_ex.info.yml

name: Custom ex
description: Данный модуль демонстрирует использование кастомных классов внутри модуля
core: 8.x
package: Drupalfly
type: module

Далее я в директории src создам дополнительную директорию, которая будет содержать наш класс, в моем случае имя директории будет Helper, внутри которой создам наш класс

<?php

namespace Drupal\custom_ex\Helper;

# Class Helper
class customExHelper{

  # Get text
  public function getText(){
    $output = 'Destroy for creation';
    return $output;
  }

}

Хочу заметить, что в именовании класса обязательно первым указывать Drupal, иначе класс у вас не подцепится.

Теперь осталось это дело проверить, я использую hook_preprocess_page()

Файл custom_ex.module

<?php

use Drupal\custom_ex\Helper;

/**
 * @param $variables
 * Implements hook_preprocess_page()
 */
function custom_ex_preprocess_page(&$variables){

  $customExHelper = new Helper\customExHelper();
  $text = $customExHelper->getText();

  debug($text);

}

И результат на экране

custom_class_in_drupal_8.png

Как вы можете заметить никаких дополнительных include() мы не использовали, система автоматически все сделала за нас, исходя из наименования класса. На этом можно закончить.

Скачать модуль, используемый в примере:

Скачать

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.