Помощник пользовательского представления ZF 1.12 - не удалось открыть

Я работаю над реструктуризацией своего проекта Zend 1.12. У меня есть пара помощников просмотра:

  • ВыходКомплексФорма.php
  • OutputDistributorsList.php

Я помещаю их в /application/views/helpers

Имена классов

  • Zend_View_Helper_OutputComplexForm
  • Zend_View_Helper_OutputDistributorsList

Насколько я понимаю, если у вас есть префикс Zend_View_Helper, вам не нужно добавлять какие-либо конфиги в application.ini

Теперь, когда я пытаюсь загрузить любую страницу (даже те, которые не используют помощники), я получаю сообщение об ошибке:

Message: Zend_Session::start() - /otms/vendor/zendframework/zendframework1/library/Zend/Loader.php(Line:134): Error #2 include_once(): Failed opening    'Zend/View/Helper/OutputComplexForm.php' for inclusion (include_path='/otms/application/../library:/otms/application/../library/phpseclib0.3.1:/otms/application/../library/Amazon:/otms/application/../library/USPS:/otms/application/../library/Composer:/otms/library:/otms/vendor/phpseclib/phpseclib/phpseclib:/otms/vendor/zendframework/zendframework1/library:.:/usr/share/php:/usr/share/pear') 

Я что-то пропустил?

УПД

Я обнаружил, что ошибка произошла после вызова функции

$startedCleanly = session_start(); //line 482

в файле /Zend/Session.php. После этого вызова свойство Zend_Session_Exception::$sessionStartError содержит описанное сообщение об ошибке. Я до сих пор не вижу связи между запуском сеанса и инициализацией вспомогательного представления.


person Tamara    schedule 09.03.2015    source источник


Ответы (1)


Для классов, специфичных для приложения, которые вы пишете — то, что появляется внутри ./application/* — обычно не должно быть в псевдопространстве имен Zend_. Вернее, они должны быть в appnamespace, как настроено в ./application/config/application.ini.

Пространство имен по умолчанию — «Application_», поэтому помощник представления с именем MyHelper обычно хранится в файле ./application/views/helpers/MyHelper.php:

class Application_View_Helper_MyHelper extends Zend_View_Helper_Abstract
{
    public function myHelper()
    {
        // do your stuff here
    }
}

Обратите внимание, что имя класса имеет верхний верблюжий регистр MyHelper, а метод — нижний верблюжий регистр myHelper().

По вашему мнению, вы можете вызвать свой помощник представления с помощью:

<?php

$output = $this->myHelper();
// Do something with $output

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

person David Weinraub    schedule 11.03.2015
comment
Спасибо за ответ. Я изменил имя класса на Application_View_Helper_OutputComplexForm, и в application.ini у меня есть строка appnamespace = Application. Однако я получил сообщение: Плагин с именем «OutputComplexForm» не найден в реестре; используемые пути: Zend_View_Helper_: Zend/View/Helper/:/otms/application/views/helpers/. - person Tamara; 11.03.2015
comment
Просто проверка: Является ли сигнатура/имя метода в классе следующим образом: public function outputComplexForm() Случай имени класса, имени файла и имени метода должен быть именно таким. - person David Weinraub; 12.03.2015