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ę namespace
wystarczający? Skąd kontroler (lub ogólnie moduł) wie, jak się odwoływać lub skanować w poszukiwaniu tej klasy?
Odpowiedzi:
Już nie używasz
file[] = ...
. Zamiast tego klasy są ładowane automatycznie. Na przykład mam moduł o następującej strukturze plików: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ę,wraz z
use
dyrektywami 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:
źródło
include_once
lubrequire_once
czy coś. Hybridformatter.php nie definiuje przestrzeni nazw. Dołączę do odpowiedzi.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
a w pliku chciałem go użyć (w tym konkretnym przypadku mój_theme.theme), które dodałem
źródło