Question

Comment poignée Drupal autoloading des classes à travers des modules? Par exemple, si j'ai un module Events, et je déclare une classe appelée événement, puis dans le fichier .info j'inclure le fichier de classe, comment est-ce inscrit?

Le problème est que je suis en train d'obtenir dynamiquement un tableau contenant tous les noms de classe chargés. get_declared_classes () ne renvoie pas les noms de tous mes les classes déclarées de cette manière, donc je suppose qu'ils en quelque sorte à chargement automatique. Suite aux suggestions d'une autre question de débordement de pile, j'ai essayé d'obtenir tous les avec spl_autoload_functions () , mais qui a également échoué.

Toutes les idées?

Était-ce utile?

La solution

Tous les fichiers répertoriés dans les fichiers sont .info lorsque les modules sont analysées reconstruisent (Seuls les fichiers modifiés / nouveaux dans cette liste sont, pour des raisons de performance).

Ces informations sont ensuite stockées dans les tables de {registry} et {registry_files}. Donc, si vous voulez obtenir toutes les classes ou celles selon un schéma de nommage donné, vous pouvez interroger ces tables.

Autres conseils

Drupal maintient un registre de code et utilise pour ses classes autochargeur. Pour remplir ce registre avec les classes de votre module, vous devez ajouter les fichiers aux fichiers d'entrée [] dans son fichier .info:

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

La autoloading classe de PHP fera en sorte que le fichier de la classe parent est également chargé.

Crédit à la jetée-Buyle utilisateur pour cette réponse, voir son réponse originale pour la même question.

L'espoir qui aide

spl_autoload_functions() retourne la liste des fonctions de chargement automatique qui ont été enregistrées spl_autoload_register(). registres Drupal deux fonctions: une autoload pour les classes ( drupal_autoload_class () ), et une pour les interfaces ( drupal_autoload_interface () ) .

Les deux fonctions utilisent _registry_check_code () ; en utilisant son code, vous pouvez écrire une fonction qui répertorie toutes les classes mises en œuvre par des modules Drupal 7.

Si vous avez ajouté une entrée aux fichiers [] tableau du fichier .info, vous devrez passer à vos modules section d'administration et cliquez sur « Enregistrer la configuration ». Cela se rafraîchir les drupal informations .info, et les nouvelles inscriptions seront enregistrées.

J'ai trouvé que mes déclarant inclure des fichiers dans le fichier d'information ne reçoit pas les reconnaître quand je commence à courir le module. Si j'ai un événement de classe dans le fichier event.inc. mais caisse un objet dans le module, il est pas reconnu. Ajouter la ligne

include_once ('CMatArticleHandler.inc');

avant la variable $ = nouvel événement (); ligne. Im » à ce nouveau donc il peut y avoir plus à lui alors, mais il a fonctionné jusqu'à présent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top