Подфункции Zend ViewHelper
Я хочу добавить более одной функции в ViewHelper. Обычно есть одна функция, названная как класс и как имя файла.
Как я могу добавить несколько функций в один ViewHelper?
Например, вот так:
class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
public function Horizontal($parameter)
{
return "...";
}
}
echo $this->MyMenuHelper()->Horizontal($parameter);
3 ответа
Алекс был на правильном пути, но что-то упустил в своем ответе: фактический myMenuHelper()
Метод должен вернуть сам помощник вида, чтобы это работало:
class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
public function myMenuHelper()
{
return $this;
}
public function horizontal() { ... }
// more methods...
}
А потом, как уже упоминалось:
echo $this->myMenuHelper()->horizontal();
Иногда вы не хотите проходить через основной метод помощника вида, хотя это не так уж плохо для некоторых видов логики. В этом случае используйте getHelper()
:
class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
public function myMenuHelper()
{
// some logic, maybe the main one
}
public function horizontal()
{
// some other logic
}
}
Следующие примеры обходят myMenuHelper()
полностью:
// in controller
$this->view->getHelper('MyMenuHelper')->horizontal();
// in view
$this->getHelper('MyMenuHelper')->horizontal();`
Например, в некоторых случаях я заполняю помощника вида некоторыми внутренними данными в контроллере, вызывая его основной метод непосредственно в представлении, которое воздействует на эти данные.
// in controller
$this->view->getHelper('MyMenuHelper')->storeData($someArray);
// in view
$this->myMenuHelper(); // iterates over $someArray
Попробуйте запустить имя функции со строчной буквы
class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
public function horizontal($parameter)
{
return "...";
}
}
в представлении:
echo $this->myMenuHelper()->horizontal($parameter);