Как зарегистрировать пользовательский помощник вида с пространством имен? - PullRequest
4 голосов
/ 27 марта 2011

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

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

В настоящее время я в своей начальной загрузке, чтобы зарегистрировать путь помощника:по имени «IsActive» не был найден в реестре;используемые пути: App \ View \ Helper _:

У кого-нибудь есть идеи, как зарегистрировать помощники вида с пространством имен?

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

В моем конфиге я использую:

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, методы с тем же именем, что и последний элемент имени класса в пространстве имен, больше не будут рассматриваться как конструктор. Это изменение не влияет на классы без пространства имен. "

0 голосов
/ 27 марта 2011

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

0 голосов
/ 27 марта 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);

Смотрите это

...