1Gb.ru counter

Использование помощников действий

Вчера Роб Ален опубликовал в своем блоге Akra’s DevNotes заметку про написание помощников действий в Zend Framework-е. Заметка хоть и не большая, но для новичков будет полезной. Представляю перевод этой заметки.

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

Первое, что вы должны сделать - решить где разместить их. Последняя версия рекомендаций по стандартной структуре проекта предлагает использовать подкаталоги вашего каталога контроллеров. Т.е. application/controllers/helpers/, и это лучший вариант.

Во-первых, вы должны сказать брукеру помощников где располагаются ваши помощники действий. Я обычно делаю это в загрузчике (bootstrap file), но точно так же можно сделать это и в плагине фронт-контроллера.

    Zend_Controller_Action_HelperBroker::addPath(
        APPLICATION_PATH .'/controllers/helpers');

Затем вы должны создать помощник действий, мы назовем его Multiples в нашем примере, тогда название файла будет application/controllers/helpers/Multiples.php:

<?php

class Zend_Controller_Action_Helper_Multiples extends
                Zend_Controller_Action_Helper_Abstract
{
    function direct($a)
    {
        return $a * 2;
    }
}

Обратите внимание на префикс названия класса помощника действий - Zend_Controller_Action_Helper. Вы можете поменять этот префикс на другой, передав его вторым параметром в функции Zend_Controller_Action_HelperBroker::addPath(), вызвав её в вашем загрузчике.

Наконец, использование в действии контроллера:

<?php

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->headTitle('Home');
        $this->view->title = 'Test of the Multiples action helper';

        $number = 30;
        $twice = $this->_helper->multiples($number);

        $this->view->number = $number;
        $this->view-twice = $twice;
    }
}

Обратите внимание на то, что мы вызываем помощник действия как метод класса _helper. Этот вызов транслируется в вызов метода direct() нашего класса помощника.

Также вы можете написать несколько методов в одном помощнике действий:

class Zend_Controller_Action_Helper_Multiples extends
                Zend_Controller_Action_Helper_Abstract
{
    function direct($a)
    {
        return $a * 2;
    }

    function thrice($a)
    {
        return $a * 3;
    }
}

Для вызова метода thrice() в действии вашего контроллера делайте так:

$thrice = $this->_helper->multiples->thrice($number);

Таким образом, если вы используете имя помощника действий как свойство _helper, то вы можете вызвать любой метод из этого помощника.

Это всего лишь общие сведения для начала освоения. За подробностями обращайтесь к руководству.

Удачи и избегайте копи-паста общей функциональности!

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Метки: , ,

5 комментариев to “Использование помощников действий”

  1. Александр Махомет Says:

    Олег, хотел с вами недавно связаться, не нашел на блоге ни одного контакта :)

  2. Лобач Олег Says:

    Мне можно писать на oleg [at] lobach.info

  3. Перехватчики в помощниках действий | Лобач.info Says:

    [...] Лобач.info Заметки LAMP-программиста о вебдеве и не только… « Использование помощников действий [...]

  4. Лобач Олег Says:

    Олег, хотел с вами недавно связаться

    А по какому поводу, можно узнать?

    Я, кстати, тоже писал Вам по поводу каталога, но ответа не было.

  5. Александр Махомет Says:

    Олег, написал вам.

Leave a Reply


FireStats icon Работает с FireStats