Перехватчики в помощниках действий

Вчера Роб Ален опубликовал продолжение заметки про написание помощников действий в 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>

Вот и все — не сложно, правда?


 

Похожие записи

Эта запись опубликована в рубриках: Zend Framework. Метки записи: , , . Постоянная ссылка.

Оставить комментарий

Почта (не публикуется) Обязательные поля помечены *

*

Вы можете использовать эти HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>