Jak dołączyć niestandardowy plik klasy do modułu?

10

W rozwoju modułu Drupal 7 mogłem dołączyć niestandardowy plik klasy inc, api lub php za pomocą dyrektywy file [] = w pliku module.info lub funkcji drupal_load_included ().

W przypadku D8 korzystającego z PSR, jaki jest właściwy sposób na spakowanie „zwykłego obiektu ole PHP” i odwołanie do niego DefaultController.php? Pomyśleć coś takiego: $a = new POPO();.

Czy wystarczy dać plik PHP zawierający klasę namespacewystarczający? Skąd kontroler (lub ogólnie moduł) wie, jak się odwoływać lub skanować w poszukiwaniu tej klasy?

Stóg
źródło
Ten link Tworzenie modułów Drupal 8.x może być pomocny
Krishna Mohan
Tak, przeczytałem przez drupal.org/node/2087879, ale nie widząc dyrektywy file [] =, niestety nie odpowiedział na to konkretne pytanie dotyczące włączenia pliku.
Rick

Odpowiedzi:

11

Już nie używasz file[] = .... Zamiast tego klasy są ładowane automatycznie. Na przykład mam moduł o następującej strukturze plików:

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • Podłącz/
        • Pole/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php definiuje klasę o nazwie HybridFormatter.

W moim pliku .module, jeśli zacznę pisać w IDE (w tym przypadku NetBeans) HybridFormatter, automatycznie się uzupełnia, \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::ponieważ jest ładowany automatycznie. Ponieważ nie chcę, aby cała ścieżka zaśmiecała mój moduł, na górze umieściłem linię,

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

wraz z usedyrektywami dla innych klas, w tym do użytku z moim modułem.

Przestrzeń nazw jest zdefiniowana w HybridFormatter.php w następujący sposób:

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }
beth
źródło
Aby upewnić się, że w pełni rozumiem, plik HybridFormatter.php zostanie automatycznie załadowany ... automatycznie? Nie ma potrzeby stosowania include_once ()? Czy HybridFormatter.php ma zdefiniowaną przestrzeń nazw?
Rick
Nie ma potrzeby, include_oncelub require_onceczy coś. Hybridformatter.php nie definiuje przestrzeni nazw. Dołączę do odpowiedzi.
beth
@beth Czy możesz mi pomóc? drupal.stackexchange.com/questions/233565/…
RobinSon
9

Chciałbym dodać, że w celu włączenia niestandardowej klasy, która nie pasuje do „wtyczki, kontrolera, formularza itp.” D8 domyślne, nadal możesz to zrobić, jak wspomniano tutaj przegląd PSR-4

W moim przypadku użycia upuściłem plik „CustomClass.php” w katalogu / modules / custom / my_module / src / Na początku pliku zamieściłem deklarację przestrzeni nazw

namespace Drupal\my_module;

a w pliku chciałem go użyć (w tym konkretnym przypadku mój_theme.theme), które dodałem

use Drupal\my_module\CustomClass;
ben.hamelin
źródło