Magento-подобные пулы кода в Zend Framework - PullRequest
3 голосов
/ 12 ноября 2010

Мне очень нравится, как Magento использует пулы кода, так что классы и функциональные возможности могут быть расширены без фактического изменения основной функциональности кода.

(для тех, кто не знаком с Magento, у вас может быть один и тот же класс в пуле кода «core» и в «локальном» пуле кода, и когда вы создаете класс, он сначала просматривает пул кода «local», и если он это делает не существует, он выглядит в «основном» пуле кода)

Я знаю, что Magneto использует Zend Framework, поэтому мне было интересно, использовал ли Varien что-то уже внутри Zend Framework, если они сделали это сами? Или, если кто-то знает, есть ли хороший способ эффективно сделать это в Zend Framework?

1 Ответ

3 голосов
/ 12 ноября 2010

Я не знаю, как Magento делает это (подсказка: посмотрите на их исходный код) , но вы могли бы достичь того же с 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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...