我非常喜欢Magento使用代码池的方式,以便可以扩展类和功能,而无需实际更改代码的核心功能。
(对于那些不熟悉Magento的人,你可以在“核心”代码池和“本地”代码池中拥有相同的类,当你创建一个类时,它首先在“本地”代码池中查找,如果是它不存在,它在“核心”代码池中查找)
我知道Magneto使用了Zend Framework,所以我想知道如果他们自己这样做,Varien是否已经在Zend Framework中使用了一些东西?或者,如果有人知道在Zend Framework中是否有一种有效的方法可以做到这一点?
答案 0 :(得分:3)
我不知道Magento是如何做到的那样(tipp:看看他们的源代码),但是你可以用Zend_Autoloader
实现同样的目标,例如:在尝试加载课程Foo_Bar_Baz
时,自动加载器会首先查看Local/Foo/Bar/Baz
,如果文件不存在,则会尝试从Core/Foo/Bar/Baz
加载。
注意: 如果有人有兴趣,请查看
app/Mage.php
的顶部(摘录如下),看看如何设置。 --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";
}