Zend ViewHelper子函数

时间:2011-12-08 19:30:03

标签: php function zend-view zend-framework view-helpers

我想向ViewHelper添加多个函数。通常有一个名为类的函数,就像文件名一样。

如何在一个ViewHelper中添加多个功能?

E.g。像这样:

class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
{
    public function Horizontal($parameter)
    {
         return "...";
    }
}

echo $this->MyMenuHelper()->Horizontal($parameter);

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

有时你不想通过视图助手的main方法,尽管对于某些种类的逻辑来说并不是那么糟糕。在这种情况下,请使用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

答案 2 :(得分:0)

尝试使用小写字母

启动函数名称
        class Zend_View_Helper_MyMenuHelper extends Zend_View_Helper_Abstract
        {
                public function horizontal($parameter)
                {
                       return "...";
                }
        }

在视图中:

        echo $this->myMenuHelper()->horizontal($parameter);