我真的很喜欢 Magento 使用代码池的方式,这样就可以在不实际更改代码的核心功能的情况下扩展类和功能。
(对于那些不熟悉 Magento 的人,你可以在“核心”代码池和“本地”代码池中使用相同的类,当你创建一个类时,它首先会在“本地”代码池中查找,如果是不存在它看起来在“核心”代码池中)
我知道 Magneto 使用 Zend Framework,所以我想知道 Varien 是否使用了 Zend Framework 中已有的东西,或者他们是否自己这样做了?或者,如果有人知道在 Zend Framework 中是否有有效执行此操作的好方法?
最佳答案
我不知道 Magento 是怎么做到的(tipp:看看他们的源代码),但你可能可以用 Zend_Autoloader
实现同样的效果,例如当尝试加载类 Foo_Bar_Baz
时,自动加载器将首先查看 Local/Foo/Bar/Baz
,如果文件不存在,它将尝试从 加载核心/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";
}
关于php - Zend Framework 中类似 Magento 的代码池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4164851/