Як я включаю файл спеціального класу в модуль?


10

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

Що стосується D8 за допомогою PSR, що є правильним способом упаковки "простого PHP-об'єкта" та його посиланням DefaultController.php? Думайте що - щось на кшталт: $a = new POPO();.

Чи достатньо лише дати PHP-файлу, що містить клас namespace? Як контролер (або модуль взагалі) знає посилатись або сканувати цей клас?


Це посилання Створення модулів Drupal 8.x може бути корисним
Крішна Мохан

Так, я читав через drupal.org/node/2087879, але не побачивши файл [] = директива, він, на жаль, не відповів на це конкретне питання про включення файлу.
Рік

Відповіді:


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" у / module / custom / my_module / src / На початку файлу я включив декларацію про область імен

namespace Drupal\my_module;

і у файлі, в якому я хотів його використати (в даному конкретному випадку my_theme.theme), я додав

use Drupal\my_module\CustomClass;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.