Вчера Роб Ален опубликовал в своем блоге Akra’s DevNotes заметку про написание помощников действий в Zend Framework-е. Заметка хоть и не большая, но для новичков будет полезной. Представляю перевод этой заметки.
Когда вам нужно использовать один и тот же функционал в нескольких контроллерах, можно воспользоваться помощником действий. Помощники действий являются очень мощным инструментом и содержат механизмы автоматического запуска, когда вы в них нуждаетесь, но вы можете проигнорировать все, в случае если Вам это не нужно.
Первое, что вы должны сделать — решить где разместить их. Последняя версия рекомендаций по стандартной структуре проекта предлагает использовать подкаталоги вашего каталога контроллеров. Т.е. <strong>application/controllers/helpers/</strong>, и это лучший вариант.
Во-первых, вы должны сказать брукеру помощников где располагаются ваши помощники действий. Я обычно делаю это в загрузчике (bootstrap file), но точно так же можно сделать это и в плагине фронт-контроллера.
Zend_Controller_Action_HelperBroker::addPath(
APPLICATION_PATH .'/controllers/helpers');
Затем вы должны создать помощник действий, мы назовем его Multiples в нашем примере, тогда название файла будет <strong>application/controllers/helpers/Multiples.php</strong>:
<?php
class Zend_Controller_Action_Helper_Multiples extends
Zend_Controller_Action_Helper_Abstract
{
function direct($a)
{
return $a * 2;
}
}
Обратите внимание на префикс названия класса помощника действий — <strong>Zend_Controller_Action_Helper</strong>. Вы можете поменять этот префикс на другой, передав его вторым параметром в функции <strong>Zend_Controller_Action_HelperBroker::addPath()</strong>, вызвав её в вашем загрузчике.
Наконец, использование в действии контроллера:
<?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, то вы можете вызвать любой метод из этого помощника.
Это всего лишь общие сведения для начала освоения. За подробностями обращайтесь к руководству.
Удачи и избегайте копи-паста общей функциональности!
Метки: php, zend framework, перевод



Олег, хотел с вами недавно связаться, не нашел на блоге ни одного контакта :)
Мне можно писать на oleg [at] lobach.info
[...] Лобач.info Заметки LAMP-программиста о вебдеве и не только… « Использование помощников действий [...]
А по какому поводу, можно узнать?
Я, кстати, тоже писал Вам по поводу каталога, но ответа не было.
Олег, написал вам.
Привет Олег.
У меня к Вам такой вопрос как можно пропарсить строку вида '$this->siteUrl' в переменную — ну например есть html в базе, но его нужно вевести с учетом текущего скина на страницу.
Topik, что-то я не совсем понимаю задачу. Опиши подробнее, если еще актуально.