php magento zend-framework magento-1.7 zend-autoloader

php - ¿Cómo agregar una biblioteca de terceros a Magento?



zend-framework magento-1.7 (2)

La biblioteca no necesita integrarse con Magento, es principalmente un contenedor que se comunica con una API.

Me gustaría poder usar esta biblioteca y hacer estas llamadas a la API desde un controlador o modelo.

¿Dónde puedo poner la biblioteca? ¿Cómo los agrego al autocargador?


Busque en la carpeta / lib en el directorio raíz de su sitio web. Desde los directorios base de Magento :

La carpeta de la biblioteca de Magento es donde vive el código de Magento no basado en módulos. Esto incluye una gran cantidad de código del sistema que permite ejecutar Magento, así como varias bibliotecas de terceros (incluido el Framework Zend). La biblioteca también es el último grupo de códigos que Magento buscará cuando intente cargar automáticamente un archivo.

Entonces, en otras palabras, si su biblioteca admite la convención de nomenclatura de archivos zend, las clases de bibliotecas se encontrarán y cargarán con el autocargador de magento. De lo contrario, puede obtener la ruta de su directorio / lib con Mage :: getBaseDir (''lib'') y escribir algo como

require_once(Mage::getBaseDir(''lib'') . ''/EZComponents/Base/src/base.php'');


Como una solución que funciona perfectamente: puede ampliar varien_event_observer, crear su propia función de autocargador y, mediante el uso de controller_front_init_beit, debe presionar este autocargador frente a la pila __autoload. Este ejemplo de integración del despachador de eventos de solarium y symphony puede explicarlo:

class JeroenVermeulen_Solarium_Model_Observer_Autoloader extends Varien_Event_Observer { /** * This an observer function for the event ''controller_front_init_before''. * It prepends our autoloader, so we can load the extra libraries. * * @param Varien_Event_Observer $event */ public function controllerFrontInitBefore( $event ) { spl_autoload_register( array($this, ''load''), true, true ); } /** * This function can autoloads classes starting with: * - Solarium * - Symfony/Component/EventDispatcher * * @param string $class */ public static function load( $class ) { if ( preg_match( ''#^(Solarium|Symfony////Component////EventDispatcher)/b#'', $class ) ) { $phpFile = Mage::getBaseDir(''lib'') . ''/'' . str_replace( ''//', ''/'', $class ) . ''.php''; require_once( $phpFile ); } } }

¡Y seguramente tus bibliotecas deberían estar en la piscina lib! Esta solución es proporcionada por @Jeroen Vermeulen, y le agradezco :)