Estoy empezando a ver Zend Framework 2 (y soy nuevo en ZF en general), y en el user guide, están utilizando la carga automática al agregar un nuevo módulo. Sin embargo, creo que la explicación es bastante desafiante para un novato. Están construyendo un archivo Module.php
dentro del directorio de módulos, que entre otras cosas contiene el siguiente código:Zend Framework 2 cargando automáticamente
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
Ahora me hizo algo de investigación en torno a tratar de averiguar lo que esta carga automática se trata. Por lo que yo entiendo, la carga automática utiliza spl_autoload_register()
y es una forma de evitar tener require_once()
en todas partes en el código. Por lo tanto, cuando intente utilizar una clase que no está definida, se ejecutará el método autoload()
que se registró, que simplemente hace una búsqueda en matriz e incluye el archivo siguiente si se agregó.
// Zend/Loader/ClassMapAutoloader.php
public function autoload($class)
{
if (isset($this->map[$class])) {
require_once $this->map[$class];
}
}
Esto parece inteligente debido al rendimiento. Espero que lo que acabo de escribir sea correcto. En base a esto, estoy tratando de averiguar qué está pasando en getAutoloaderConfig()
desde el primer fragmento de código, pero estoy bastante confundido. Parece que la matriz devuelta por este método se usa para AutoloaderFactory::factory()
, pero no estoy seguro para qué propósito. Parece que la instancia de autocargadores con opciones, pero exactamente lo que hace, no estoy seguro. Supongo que la segunda entrada de la matriz especifica dónde encontrar los archivos fuente para el espacio de nombres del módulo, al menos esa sería mi suposición. La primera entrada que soy, sin embargo, no estoy seguro. En la guía del usuario, que dice lo siguiente:
Como estamos en desarrollo, que no es necesario cargar los archivos a través de la classmap, por lo que proporcionan una matriz vacía para el cargador automático classmap.
El archivo simplemente devuelve una matriz vacía. No estoy seguro de cuál es el propósito de este ClassMapAutoloader.
Lo siento si mi punto no está claro; Básicamente estoy tratando de averiguar qué está pasando en getAutoloaderConfig()
y para qué se usa mymodule/autoload_classmap.php
. Si alguien pudiera arrojar algo de luz sobre esto, ¡sería muy apreciado!
Zend es tan ingenioso que es ridículo. – wesside
Absolutamente. Pero creo que si logras resolverlo, en realidad es realmente poderoso. Como Magento. –
Lo uso en el trabajo, tiene sus altibajos. Sin embargo, prefiero Kohana y uso las Bibliotecas Zend que pueda necesitar. Lo siento @ andy124, todavía no he usado 2, siento secuestrar tu pregunta. – wesside