Zend Framework: Плагин пути - PullRequest
       1

Zend Framework: Плагин пути

8 голосов
/ 09 ноября 2010

У меня ZF 1.11 работает без проблем и следовал инструкциям в руководстве по производительности, чтобы удалить операторы require_once. Я добавил автозагрузчик в мой индексный файл, как говорится (на заметку, я не понимаю, почему это не может быть включено в boostrap), но теперь мои плагины не найдены.

Например, форма использует декоратор DijitElement, который возвращает ошибку:

Zend_Loader_PluginLoader_Exception: Plugin by name 'DijitElement' was not found in the registry; used paths: Zend_Form_Decorator_: Zend/Form/Decorator/ in C:\wamp\www\cms\library\Zend\Loader\PluginLoader.php on line 412

В этом конструкторе формы я добавил следующее, чтобы попытаться исправить это безрезультатно:

$this->addPrefixPath('Zend_Dojo_Form_Decorator', 'Zend/Dojo/Form/Decorator', 'DECORATOR');

Если я переименую декоратор, чтобы использовать 'Zend_Dojo_Form_Decorator_DijitElement' вместо просто 'DijitElement', я получу:

Plugin by name 'Zend_Dojo_Form_Decorator_DijitElement' was not found in the registry; used paths: Zend_Dojo_Form_Decorator_: Zend/Dojo/Form/Decorator/ Zend_Form_Decorator_: Zend/Form/Decorator/

В моем начальном загрузчике я использую кеш плагина, до того как я удалил require_once, у меня не было префиксных путей в конструкторе, который работал нормально, но после удаления я пробовал с и без, и ни одна из них не работает.

protected function _initPluginCache() {
    $path = '/cache/pluginLoaderCache.php';
    if(file_exists($path)) include_once $path;
    $loader = new Zend_Loader_PluginLoader(array(
        'Zend_View_Helper'=>LIBRARY_PATH.'/Zend/View/Helper/',
        'Zend_Dojo_View_Helper'=>LIBRARY_PATH.'/Zend/Dojo/View/Helper',
        'Zend_Dojo_Form_Decorator'=>'Zend/Dojo/Form/Decorator',
        'Zend_Dojo_Form_Element'=>LIBRARY_PATH.'/Zend/Dojo/Form/Element'
    ));
    $loader = Zend_Loader_PluginLoader::setIncludeFileCache($path);
}

Как мне сообщить Zend, где находятся файлы? Я предполагаю, что это как-то связано с моим автозагрузчиком, но в руководстве просто сказано, что добавление этого поможет:

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

К вашему сведению, руководство здесь http://framework.zend.com/manual/en/performance.classloading.html

1 Ответ

4 голосов
/ 10 ноября 2010

Я нашел свое решение, проблема не была связана с удалением require или автозагрузчика, а фактически с декораторами элементов. Добавление массива декораторов, использующего DijitElement к элементу, не относящемуся к dojo, приведет к этой ошибке плагина. Глупая ошибка за маленькую ошибку

...