该库不需要与 magento 集成,它主要是一个与 API 通信的包装器。
我希望能够使用这个库并从控制器或模型中进行这些 API 调用。
我可以把图书馆放在哪里?如何将它们添加到自动加载器?
该库不需要与 magento 集成,它主要是一个与 API 通信的包装器。
我希望能够使用这个库并从控制器或模型中进行这些 API 调用。
我可以把图书馆放在哪里?如何将它们添加到自动加载器?
查看您网站根目录中的 /lib 文件夹。从Magento 基本目录:
Magento 的库文件夹是基于非模块的 Magento 代码所在的位置。这包括大量允许 Magento 运行的系统代码,以及一些第三方库(包括 Zend 框架)。该库也是 Magento 在尝试自动加载文件时将搜索的最后一个代码池。
因此,换句话说,如果您的库支持 zend 文件命名约定 - 库类将由 magento 自动加载器找到并加载。否则,您可以使用 Mage::getBaseDir('lib') 获取 /lib 目录的路径并编写类似的内容
require_once(Mage::getBaseDir('lib') . '/EZComponents/Base/src/base.php');
作为一个完美的解决方案:您可以扩展 varien_event_observer,创建自己的自动加载器函数,并使用 controller_front_init_before 事件将此自动加载器推送到 __autoload 堆栈的前面。这个集成日光浴室和交响乐事件调度器的例子可以解释它:
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 );
}
}
}
当然,您的库应该在库池中!此解决方案由@Jeroen Vermeulen 提供,我感谢他 :)