Zend Framework中类似Magento的代码池

时间:2010-11-12 12:59:57

标签: php zend-framework magento

我非常喜欢Magento使用代码池的方式,以便可以扩展类和功能,而无需实际更改代码的核心功能。

(对于那些不熟悉Magento的人,你可以在“核心”代码池和“本地”代码池中拥有相同的类,当你创建一个类时,它首先在“本地”代码池中查找,如果是它不存在,它在“核心”代码池中查找)

我知道Magneto使用了Zend Framework,所以我想知道如果他们自己这样做,Varien是否已经在Zend Framework中使用了一些东西?或者,如果有人知道在Zend Framework中是否有一种有效的方法可以做到这一点?

1 个答案:

答案 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";
}