Вчера Роб Ален опубликовал продолжение заметки про написание помощников действий в Zend Framework-е. Представляю перевод этой заметки.
Продолжая обсуждение помощников действий Zend Framework (мой перевод: Использование помощников действий, — прим. пер.), давайте поговорим о перехватчиках в них.
Перехватчики – это особенность помощников действий, которая позволяет вам выполнить некий код в определенных точках цикла диспетчеризации. Собственно, для помощников действий доступно всего два типа перехватчиков:
- preDispatch (): вызывается перед запуском действия
- postDispatch (): вызывается после завершения работы действия
Это позволяет вам быть уверенным в том, что некоторая функциональность всегда будет выполнена при каждом запросе. Рассмотрим простой пример вывода случайной цитаты в «подвале» сайта.
Мы начнем с помощника действия в нашем каталоге controllers/helpers, названного Quote:
<?php
class Zend_Controller_Action_Helper_Quote extends Zend_Controller_Action_Helper_Abstract
{
function preDispatch()
{
$view = $this->getActionController()->view;
$view->footerQuote = $this->getQuote();
}
function getQuote()
{
$quotes[] = 'I want to run, I want to hide, I want to tear down the walls';
$quotes[] = 'One man come in the name of love, One man come and go';
return $quotes[rand(0, count($quotes)-1)];
}
}
Метод preDispatch() получает объект представления из контроллера действия и присваивает случайную цитату свойству footerQuote этого объекта.
Мы должны сказать брокеру помощников, что мы хотим активировать этот перехватчик. Для этого в дополнение к вызову addPath(), наш загрузочный файл нужно дополнить вызовом addHelper(). После этого загрузчик станет содержать код:
// Action Helpers
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH .'/controllers/helpers');
$hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Quote');
Zend_Controller_Action_HelperBroker::addHelper($hooks);
Пока мы используем addPath() для указания брокеру помощников где искать помощники действий, мы можем использовать getStaticHelper() в качестве простого способа инстанцирования класса без require() и последующего вызова new. Затем мы можем зарегистрировать его с помощью помощника брокера использовав addHelper().
Так как цитата отображается в подвале сайта, требуется внести изменения в HTML-код в layout.phtml:
<div id="footer">
<div id="quote">
<?php echo $this->footerQuote; ?>
</div>
</div>
Вот и все — не сложно, правда?
Метки: php, zend framework, перевод


