Использование помощников действий
Вчера Роб Ален опубликовал в своем блоге 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, то вы можете вызвать любой метод из этого помощника.
Это всего лишь общие сведения для начала освоения. За подробностями обращайтесь к руководству.
Удачи и избегайте копи-паста общей функциональности!
Метки: php, zend framework, перевод


ноября 2, 2008 at 17:12
Олег, хотел с вами недавно связаться, не нашел на блоге ни одного контакта :)
ноября 2, 2008 at 17:36
Мне можно писать на oleg [at] lobach.info
ноября 6, 2008 at 17:14
[...] Лобач.info Заметки LAMP-программиста о вебдеве и не только… « Использование помощников действий [...]
ноября 18, 2008 at 14:31
А по какому поводу, можно узнать?
Я, кстати, тоже писал Вам по поводу каталога, но ответа не было.
ноября 18, 2008 at 14:47
Олег, написал вам.