Zend Framework1,有没有办法覆盖每个Controller的Zend_View_Helper_ *函数?

时间:2015-01-08 21:17:43

标签: php zend-framework view-helpers

我有一个像下面的View Helper,它工作得很好:

class Zend_View_Helper_List extends Zend_View_Helper_Abstract
{
    public function list()
    {
        return '<ul><li>Something Really Good</li></ul>'; // generated html 
    }
}

我的全局布局myapp.phtml

<div><?php echo $this->list(); ?></div>

我的问题是如何在不同的控制器中覆盖list(),或者甚至更细粒度地控制每个控制器操作?

我试图在每个控制器中设置一个View变量,例如$this->view->type然后将其传递给列表函数<div><?php echo $this->list($this->type); ?></div>,但它看起来很脏而且不对!

2 个答案:

答案 0 :(得分:1)

您可以将助手放在特定控制器的view/helpers文件夹中,以便仅对此控制器可见。

如果您需要根据操作进行更改,还可以为助手$this->view->setHelperPath('MyScripts/View/Helper/','MyScripts_View_Helper');添加新路径。

答案 1 :(得分:0)

如果您只想拥有一个视图帮助器,则可以有效地使用变量 你可以尝试这样的事情:

在你的foo动作中:

$this->view->type = 'action_foo';

在View Helper中:

public function list()
{
    if (isset($this->view->type)){
        if ('action_foo' == $this->view->type)
            return '<ul><li>Something Really Good for Foo Action</li></ul>'; // generated html 
        else
            return '<ul><li>' . $this->view->type . '</li></ul>'; // generated html 
    }
    else
        return '<ul><li>Something Really Good</li></ul>'; // generated html 
}