Pregunta

¿Cómo maneja Drupal Autolading de las clases a través de módulos? Por ejemplo, si tengo un módulo de eventos, y declaro una clase llamada evento, y luego en el archivo .info incluyo el archivo de clase, ¿cómo se registra esto?

El problema es que estoy tratando de obtener dinámicamente una matriz que contenga todos los nombres de clase cargados. get_declared_classes () No devuelve los nombres de todas mis clases declaradas de esta manera, por lo que supongo que de alguna manera se animan de alguna manera. Siguiendo las sugerencias de otra pregunta de desbordamiento de pila, intenté conseguirlas todas con spl_autoload_functions (), pero eso también no tuvo éxito.

¿Algunas ideas?

¿Fue útil?

Solución

Todos los archivos enumerados en los archivos .info se analizan cuando los módulos se reconstruyen (solo se cambian/nuevos archivos en esa lista son, por razones de rendimiento).

Esa información se almacena luego en el {registry} y {registry_files} mesas. Entonces, si desea obtener todas las clases o aquellas de acuerdo con un patrón de nombres dado, puede consultar esas tablas.

Otros consejos

Drupal mantiene un registro de código y lo usa para sus clases Autoloader. Para completar este registro con las clases de su módulo, debe agregar sus archivos a la entrada de archivos [] en su archivo .info:

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

La clase de PHP se asegurará de que el archivo de clase principal también esté cargado.

Crédito al usuario del muelle para esta respuesta, vea su Respuesta original aquí para la misma pregunta.

Espero que ayude

spl_autoload_functions() Devuelve la lista de las funciones de AutOload que se han registrado en spl_autoload_register(). Drupal registra dos funciones de Autoload: una para las clases (Drupal_autoload_class ()), y uno para las interfaces (Drupal_autoload_interface ()).

Ambas funciones usan _registry_check_code (); Usando su código, puede escribir una función que enumera todas las clases implementadas por los módulos Drupal 7.

Si ha agregado una entrada a la matriz de archivos [] del archivo .info, deberá ir a su sección de administración de módulos y hacer clic en "Guardar configuración". Esto obtendrá Drupal para actualizar la información .info, y las nuevas entradas se registrarán.

He descubierto que declarar mis archivos de inclusión en el archivo de información no los reconoce cuando comienzo a ejecutar el módulo. Si tengo un evento de clase en el archivo event.inc. Pero toque un objeto en el módulo, no se reconoce. Agrego la línea

include_once ('CMatArticleHandler.inc');

Antes de $ variable = new Event (); línea. Soy nuevo en esto, así que puede haber más que esto, pero ha funcionado hasta ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a drupal.stackexchange
scroll top