В разработке модулей для Drupal 7 я мог бы включить пользовательский файл классов inc, api или php, используя директиву file [] = в файле module.info или функцию drupal_load_included ().
В D8 с использованием PSR, как правильно упаковать «обычный объект PHP» и ссылаться на него DefaultController.php
? Думайте что - то вроде: $a = new POPO();
.
namespace
Достаточно ли просто дать PHP-файл, содержащий класс ? Как контроллер (или модуль в целом) узнает, что он ссылается или сканирует этот класс?
Ответы:
Вы больше не используете
file[] = ...
. Вместо этого классы загружаются автоматически. Например, у меня есть модуль со следующей файловой структурой:HybridFormatter.php
определяет класс с именем HybridFormatter.В моем файле .module, если я начинаю печатать в своей IDE (в данном случае NetBeans),
HybridFormatter
он\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::
автоматически завершается, потому что он автоматически загружается. Поскольку я не хочу, чтобы весь этот модуль засорял мой модуль, наверху я разместил строку,наряду с
use
директивами для других классов, которые я включаю для использования с моим модулем.Пространство имен определяется в HybridFormatter.php следующим образом:
источник
include_once
илиrequire_once
или что - нибудь. Hybridformatter.php действительно определяет пространство имен. Я включу в ответ.Я хотел бы добавить это для включения пользовательского класса, который не вписывается в D8 «плагин, контроллер, форма и т. Д.» по умолчанию, вы все еще можете сделать это, как указано в обзоре PSR-4 здесь
Для моего случая использования я удалил «CustomClass.php» в / modules / custom / my_module / src / В начале файла я включил объявление пространства имен
и в файле, который я хотел использовать в (в данном конкретном случае my_theme.theme) я добавил
источник