Как зарегистрировать настраиваемый помощник представления, имеющий пространство имен?

У меня есть приложение Zend Framework с настраиваемой библиотекой с пространством имен (PHP 5.3).

Я хочу зарегистрировать помощников представления, но я не могу этого сделать из-за пространства имен, которое я использую в помощнике представления.

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

protected function _initView()
{
    $view = new Zend_View();
    $view->addHelperPath(
        APPLICATION_PATH . "/../library/App/View/Helper",
        "App\View\Helper"
    );
}

Ошибка, которую я получаю:

Zend_Loader_PluginLoader_Exception: плагин с именем IsActive не найден в реестре; используемые пути: App \ View \ Helper_:

Кто-нибудь знает, как зарегистрировать помощников представления, которые имеют пространство имен?


person tom    schedule 27.03.2011    source источник
comment
Вы имеете в виду пространства имен PHP 5.3 или пространства имен ZF?   -  person user594791    schedule 27.03.2011


Ответы (3)


В своей конфигурации я использую:

resources.view.helperPath.Glewz\View\Helper\ = APPLICATION_PATH "/../library/Glewz/View/Helper"

Одна вещь, которую я обнаружил, заключалась в том, что мне нужно добавить функцию-конструктор, поскольку имя вспомогательного класса представления и общедоступная функция одинаковы, она будет использовать эту функцию в качестве конструктора. Это не будет проблемой, если вы используете PHP 5.3.3 или выше - http://php.net/manual/en/language.oop5.decon.php - «Начиная с PHP 5.3.3, методы с тем же именем, что и последний элемент имени класса в пространстве имен, больше не будут обрабатываться. в качестве конструктора. Это изменение не влияет на классы без пространства имен ".

person robertlbolton    schedule 27.03.2011
comment
Попробуйте добавить в код завершающую косую черту - App \ View \ Helper \ - person robertlbolton; 29.03.2011

В моем бутстрапе я использую это:

$view->addHelperPath(APPLICATION_PATH . '/../library/App/View/Helper', 'App_View_Helper');

Дополнительно: вы можете перегрузить метод __call в Zend_View_Abstract:

if ( method_exists($helper, $name) ) {
    $methodName = $name;
} else {
    $methodName = 'direct';
}

return call_user_func_array(array($helper, $methodName), $args);

См. Это

person Iscander    schedule 27.03.2011
comment
Это можно использовать, если вы не используете пространство имен. Мне нужно решение, в котором пользовательская библиотека имеет пространство имен. - person tom; 27.03.2011
comment
смотреть дополнительно. может это поможет. - person Iscander; 27.03.2011
comment
метод overload __call помогает или нет? - person Iscander; 27.03.2011

Я думаю, что автозагрузчик ZF по умолчанию не может работать с пространствами имен. Вы можете попробовать написать свой собственный автозагрузчик (или попробовать использовать что one) и зарегистрируйте его по умолчанию.

person Radek Benkel    schedule 27.03.2011
comment
Автозагрузчик для пространств имен действительно работает с autoloaderNamespaces [] = 'App'. Но добавление помощников представления в пространство имен - нет. - person tom; 27.03.2011