Frage

Wie handelt es sich bei Drupal mit Autolading von Klassen durch Module? Wenn ich beispielsweise ein Ereignismodul habe und eine Klasse namens Ereignis erkläre, und dann in der .Info -Datei die Klassendatei eingeben, wie ist das registriert?

Das Problem ist, dass ich versuche, ein Array mit allen geladenen Klassennamen dynamisch zu erhalten. get_declared_classes ()) Gibt die Namen aller auf diese Weise deklarierten Namen nicht zurück, daher gehe ich davon aus, dass sie irgendwie automatisch aufgeladen sind. Nach den Vorschlägen eines anderen Stapelüberlauffrage habe ich versucht, alle mit ihnen zu bekommen spl_autoload_functions (), Aber das war auch erfolglos.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Alle in .info -Dateien aufgeführten Dateien werden analysiert, wenn Module wieder aufgebaut werden (nur geändert/neue Dateien in dieser Liste sind aus Leistungsgründen).

Diese Informationen werden dann in der gespeichert {registry} und {registry_files} Tische. Wenn Sie also alle Klassen oder solche nach einem bestimmten Namensmuster erhalten möchten, können Sie diese Tabellen abfragen.

Andere Tipps

Drupal unterhält eine Coderegistrierung und verwendet sie für den Autoloader der Klassen. Um diese Registrierung mit den Klassen Ihres Moduls zu füllen, sollten Sie ihre Dateien zu den Dateien [] in der .Info -Datei hinzufügen:

files[] = includes/Foo.inc
files[] = includes/Bar.inc

Das Autoloading von PHP stellt sicher, dass die übergeordnete Klassendatei ebenfalls geladen ist.

Gutschrift an Benutzer Pier-Buyle für diese Antwort siehe seine Original Antwort hier für die gleiche Frage.

Ich hoffe, das hilft

spl_autoload_functions() Gibt die Liste der Autoloadfunktionen zurück, die mit registriert wurden spl_autoload_register(). Drupal registriert zwei Autoloadfunktionen: eine für die Klassen (Drupal_autoload_class ()) und eine für die Schnittstellen (Drupal_autoload_interface ()).

Beide Funktionen verwenden _registry_check_code (); Mit seinem Code können Sie eine Funktion schreiben, die alle von Drupal 7 -Modulen implementierten Klassen auflistet.

Wenn Sie dem Dateien [] Array der .Info -Datei einen Eintrag hinzugefügt haben, müssen Sie zu Ihrem Abschnitt "Modules Administration" wechseln und auf "Konfiguration speichern" klicken. Dadurch werden Drupal die .Info -Informationen aktualisiert, und die neuen Einträge werden registriert.

Ich habe festgestellt, dass das Deklarieren meiner Einfügungsdateien in der Info -Datei sie nicht erkannt wird, wenn ich das Modul ausführe. Wenn ich ein Klassenereignis in der Dateiereignis habe.inc. Aber ein Objekt im Modul, es wird nicht erkannt. Ich füge die Linie hinzu

include_once ('CMatArticleHandler.inc');

vor dem $ variable = new event (); Linie. Ich bin neu darin, also kann es mehr als das geben, aber es hat bisher funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit drupal.stackexchange
scroll top