Как включить файл пользовательского класса в модуль?

10

В разработке модулей для Drupal 7 я мог бы включить пользовательский файл классов inc, api или php, используя директиву file [] = в файле module.info или функцию drupal_load_included ().

В D8 с использованием PSR, как правильно упаковать «обычный объект PHP» и ссылаться на него DefaultController.php? Думайте что - то вроде: $a = new POPO();.

namespaceДостаточно ли просто дать PHP-файл, содержащий класс ? Как контроллер (или модуль в целом) узнает, что он ссылается или сканирует этот класс?

стог
источник
Эта ссылка Создание модулей Drupal 8.x может быть полезно
Кришна Мохан
Да, я прочитал drupal.org/node/2087879, но, не увидев директиву file [] =, она, к сожалению, не ответила на этот конкретный вопрос о включении файлов.
Рик

Ответы:

11

Вы больше не используете file[] = .... Вместо этого классы загружаются автоматически. Например, у меня есть модуль со следующей файловой структурой:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • SRC /
      • Плагин /
        • поле /
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php определяет класс с именем HybridFormatter.

В моем файле .module, если я начинаю печатать в своей IDE (в данном случае NetBeans), HybridFormatterон \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::автоматически завершается, потому что он автоматически загружается. Поскольку я не хочу, чтобы весь этот модуль засорял мой модуль, наверху я разместил строку,

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

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

Пространство имен определяется в HybridFormatter.php следующим образом:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }
в промежутке
источник
Таким образом, чтобы убедиться, что я полностью понимаю, HybridFormatter.php будет автоматически загружаться ... автоматически? Там нет необходимости для include_once ()? Есть ли в HybridFormatter.php определенное пространство имен?
Рик
Там нет необходимости include_onceили require_onceили что - нибудь. Hybridformatter.php действительно определяет пространство имен. Я включу в ответ.
Beth
@beth Можете ли вы помочь мне? drupal.stackexchange.com/questions/233565/…
RobinSon
9

Я хотел бы добавить это для включения пользовательского класса, который не вписывается в D8 «плагин, контроллер, форма и т. Д.» по умолчанию, вы все еще можете сделать это, как указано в обзоре PSR-4 здесь

Для моего случая использования я удалил «CustomClass.php» в / modules / custom / my_module / src / В начале файла я включил объявление пространства имен

namespace Drupal\my_module;

и в файле, который я хотел использовать в (в данном конкретном случае my_theme.theme) я добавил

use Drupal\my_module\CustomClass;
ben.hamelin
источник