Zend: как сделать общий код между помощниками представления и действия?

Мне нужно логическое значение из комбинации некоторой конфигурации и вызова внешнего веб-сервиса.

Логическое значение необходимо в файле макета каждого представления. Это также необходимо в нескольких избранных контроллерах.

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

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

Есть ли способ лучше?

Спасибо!


person scottlepich    schedule 17.02.2012    source источник


Ответы (1)


Вы должны иметь возможность выполнять обе задачи с помощью помощника действий. Возможно, вы захотите взглянуть на этот пост в блоге MWOP: http://mwop.net/blog/235-A-Simple-Resource-Injector-for-ZF-Action-Controllers, где он использует помощник действий для назначения ресурсов из начальной загрузки контроллеру. Вы хотели бы использовать аналогичный подход, за исключением того, что вы устанавливаете свою логическую переменную на контроллере. Вы также получаете доступ к объекту View из помощника, используя:

$view = Zend_Layout::getMvcInstance()->getView();
$view->yourBooleanVar = 'whatever';

к которым вы можете получить доступ в своих представлениях, как обычно.

person Tim Fountain    schedule 17.02.2012
comment
Взгляните на этот подход к инъекции сейчас. На самом деле у меня есть два помощника действий, один из которых проверяет внешний сервис, а другой присваивает логическое значение. Разве это не правильно? - person scottlepich; 17.02.2012
comment
И при таком подходе я должен вызывать помощника действия из каждого контроллера, чтобы получить доступ к представлению? Я не уверен, что понимаю. - person scottlepich; 17.02.2012
comment
Второй пример кода в сообщении блога вызывает помощника действия из метода в начальной загрузке, поэтому он будет автоматически запускаться независимо от того, нужно ли вам использовать помощника в ваших контроллерах. Может быть, если бы вы могли объяснить немного больше, для чего нужны логические переменные, я мог бы привести лучший пример. - person Tim Fountain; 17.02.2012
comment
Оказывается, мой вариант использования проще, чем я думал, я могу установить переменную представления в preDispatch во втором помощнике и просто проверить значение представления в нескольких контроллерах, которым это нужно. Спасибо за ответ. - person scottlepich; 18.02.2012