In der Drupal 7- Modulentwicklung könnte ich eine benutzerdefinierte Inc-, API- oder PHP-Klassendatei mithilfe der Datei file [] = in der Datei module.info oder der Funktion drupal_load_included () einfügen.
Was ist bei D8 mit PSR der richtige Weg, um ein "einfaches altes PHP-Objekt" zu verpacken und darauf zu verweisen DefaultController.php
? Denken Sie so etwas wie : $a = new POPO();
.
Ist es namespace
ausreichend, nur die PHP-Datei mit der Klasse anzugeben? Woher weiß der Controller (oder das Modul im Allgemeinen), ob er auf diese Klasse verweist oder nach ihr sucht?
Antworten:
Du benutzt nicht
file[] = ...
mehr. Stattdessen werden Klassen automatisch geladen. Zum Beispiel habe ich ein Modul mit der folgenden Dateistruktur:HybridFormatter.php
definiert eine Klasse namens HybridFormatter.Wenn ich in meiner .module-Datei meine IDE (in diesem Fall NetBeans) eingebe, wird
HybridFormatter
sie automatisch vervollständigt,\Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::
da sie automatisch geladen wird. Da ich nicht möchte, dass der gesamte Pfad mein Modul verschmutzt, habe ich oben die Zeile platziert.zusammen mit
use
Anweisungen für andere Klassen, die ich für die Verwendung mit meinem Modul einbeziehe.Der Namespace wird in HybridFormatter.php folgendermaßen definiert:
quelle
include_once
oderrequire_once
oder irgendetwas. Hybridformatter.php definiert einen Namespace. Ich werde in die Antwort aufnehmen.Ich möchte das hinzufügen, um eine benutzerdefinierte Klasse aufzunehmen, die nicht in das D8 "Plugin, Controller, Formular usw." passt. Standardmäßig können Sie dies weiterhin tun, wie in der PSR-4-Übersicht hier angegeben
Für meinen Anwendungsfall habe ich eine "CustomClass.php" in / modules / custom / my_module / src / abgelegt. Am Anfang der Datei habe ich die Namespace-Deklaration eingefügt
und in der Datei, in der ich es verwenden wollte (in diesem speziellen Fall my_theme.theme), habe ich hinzugefügt
quelle