Integrando el autocargador del compositor en Magento

19

Así que el compositor es increíble, y hay mucho código en el repositorio de empaquetadores del compositor que facilita la escritura de extensiones de Magento.

El problema al que me enfrento es cómo configurar (limpiamente) la carga automática.

Por defecto, los paquetes de compositor se instalan en / vendor, y dentro de ese directorio hay un archivo autoload.php que configura la carga de clases para los paquetes administrados por compositor.

Entonces, ¿cuál sería la mejor manera de requerir el archivo '/vendor/autoload.php' del compositor? Esto debería funcionar tanto para la tienda web como para los scripts de shell. ¿Hay algún evento de observación que pueda tocar para hacer el require_once?

¡Salud!

Aaron Bonner
fuente
No tengo idea si github.com/magento-hackathon/magento-composer-installer es de alguna ayuda aquí. Creo que no está relacionado. Creo que intentas instalar paquetes que no son de Magento con Composer y básicamente quieres tenerlos en lib /
Alex
Sí, puede configurar Composer para que se instale en lib si lo desea, pero quiero mantener las libs de composer / mage libs separadas si es posible. También en el compositor puede tener cosas buenas como la carga automática de mapas de clase que no encaja con el mecanismo de carga automática de Mage.
Aaron Bonner
1
+1. Parece que uno de los primeros despachos de eventos de Mage.php debería hacer el truco ...?
kalenjordan
Sé que esto fue respondido hace mucho tiempo, pero otra opción es incluir el cargador automático del proveedor en su archivo index.php (antes require_once $mageFilenamese llama). Esto funciona bien para instalaciones de clientes y no requiere reescribir archivos en absoluto.
Joseph en SwiftOtter
Bueno, estás pirateando un archivo central, index.php. Cuando actualice, necesitará recordar que agregó esa línea de código a index.php.
Aaron Bonner

Respuestas:

15

El autocargador Magento está registrado en Mage.php.

Si desea hacer esto en un módulo propio, debe tomar el primer evento posible y requerir el cargador automático allí

Según el análisis de Alan, esto sería resource_get_tablename, pero debes asegurarte de que solo manejas este evento una vez.

La solución rápida y sucia sería parchear Mage.php(el comienzo del archivo), pero esto está pirateando el núcleo.

También tenemos el módulo Magento-PSR-0-Autoloader , que ofrece una forma de agregar compositores de carga automática a través de la configuración. Es una implementación básica que hace uso del resource_get_tablenameevento.

Alex
fuente
Gracias Alex, eso es perfecto. Había parcheado mage.php pero no quería poner eso en producción. ¡observar resource_get_tablename funcionó bien!
Aaron Bonner
44
Vinai también tuvo una gran sugerencia para poner Varien_Autoload en el grupo de códigos local y poner allí el código necesario para evitar eventos costosos de observación y parchear el código central directamente.
Aaron Bonner
1
"Implementación simple del ejemplo anterior: github.com/thijssnowcountry/magento1_composer_loader " - @ user2594875
Fabian Schmengler