Domanda

Come si comporta Drupal autoloading delle classi attraverso i moduli? Per esempio, se ho un modulo eventi, e ho dichiarare una classe chiamata evento, e poi nel file di .info includo il file di classe, come è questo sei registrato?

Il problema è che io sto cercando di ottenere dinamicamente una matrice contenente tutti i nomi delle classi caricate. get_declared_classes () non restituisce i nomi di tutte le mie classi dichiarate in questo modo, così sto supponendo che stanno caricati automaticamente in qualche modo. Seguendo i suggerimenti da un'altra domanda Stack Overflow, ho cercato di ottenere tutte con spl_autoload_functions () , ma che era anche riuscita.

Tutte le idee?

È stato utile?

Soluzione

Tutti i file elencati nel .info file vengono analizzati quando i moduli sono a ricostruire (Solo modificati / nuovi file in tale elenco sono, per motivi di prestazioni).

Queste informazioni vengono quindi memorizzate nelle tabelle {registry} e {registry_files}. Quindi, se si desidera ottenere tutte le classi o quelli in base a un dato modello di denominazione, è possibile interrogare tali tabelle.

Altri suggerimenti

Drupal mantiene un registro di codice e lo utilizza per la sua classe autoloader. Per compilare questo Registro di sistema con le classi del modulo, è necessario aggiungere i file ai file [] voce nel .info è il file:

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

class caricamento automatico di PHP farà in modo che il file di classe padre è anche caricato.

di credito per l'utente molo-Buyle questa risposta, vedere il suo risposta originale qui per la stessa domanda.

La speranza che aiuta

spl_autoload_functions() restituisce l'elenco delle funzioni autoload che sono stati registrati con spl_autoload_register(). registri drupal due funzioni autoload: uno per le classi ( drupal_autoload_class () ), e una per le interfacce ( drupal_autoload_interface () ) .

Entrambe le funzioni utilizzano () ; utilizzando il suo codice, è possibile scrivere una funzione che elenca tutte le classi implementate con Drupal 7 moduli.

Se avete aggiunto una voce al file [] array del .info file, si dovrà andare alla sezione moduli di amministrazione e fare clic su "Salva configurazione". Questo otterrà Drupal per aggiornare le informazioni .info, e verrà registrato le nuove voci.

ho scoperto che dichiarando i miei file includere nel file di informazioni non farli riconosciuti quando ho avviare l'esecuzione del modulo. Se ho un evento di classe nel file event.inc. ma crea un oggetto nel modulo, non è riconosciuto. Aggiungo la linea

include_once ('CMatArticleHandler.inc');

prima della variabile $ = nuovo evento (); linea. Im' nuovo a questo modo ci possono essere più ad esso, allora questo, ma ha funzionato finora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top