我非常喜欢Magento使用代码池的方式,以便可以在不实际更改代码核心功能的情况下扩展类和功能.
(对于不熟悉Magento的用户,您可以在“核心”代码池和“本地”代码池中拥有相同的类,当您创建类时,它首先会在“本地”代码池中查找,如果不存在,看起来在“核心”代码池中)
我知道Magneto使用Zend Framework,所以我想知道Varien是否使用Zend Framework内部已经存在的东西,如果他们自己这样做?或者,如果有人知道在Zend Framework中是否有一种有效的方法可以有效地做到这一点?
解决方法:
我不知道Magento是如何做到的(提示:看他们的源代码),但是您可能可以使用Zend_Autoloader
来实现相同的功能,例如尝试加载Foo_Bar_Baz类时,自动加载器将首先在Local / Foo / Bar / Baz中查找,如果文件不存在,它将尝试从Core / Foo / Bar / Baz加载.
Note: If anyone’s interested, take a look at the top of
app/Mage.php
(excerpt follows) to see how this gets set. –Alan
if (defined('COMPILER_INCLUDE_PATH')) {
$appPath = COMPILER_INCLUDE_PATH;
set_include_path($appPath . PS . Mage::registry('original_include_path'));
include_once "Mage_Core_functions.php";
include_once "Varien_Autoload.php";
} else {
/**
* Set include path
*/
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';
$appPath = implode(PS, $paths);
set_include_path($appPath . PS . Mage::registry('original_include_path'));
include_once "Mage/Core/functions.php";
include_once "Varien/Autoload.php";
}