Zend Framework1,有没有办法覆盖每个控制器的 Zend_View_Helper_* 函数?
Zend Framework1, Is there a way to override Zend_View_Helper_* functions per Controller?
我有一个如下所示的视图助手,它工作得很好:
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>
,但是看着脏不对啊!
您可以将助手放在特定控制器的 view/helpers
文件夹中,这样它就只对该控制器可见。
如果您需要根据操作更改它,您还可以为助手添加新路径 $this->view->setHelperPath('MyScripts/View/Helper/','MyScripts_View_Helper');
。
如果您只想拥有一个视图助手,您可以有效地使用变量。
你可以尝试这样的事情:
在您的 foo 操作中:
$this->view->type = 'action_foo';
在您的视图助手中:
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
}
我有一个如下所示的视图助手,它工作得很好:
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>
,但是看着脏不对啊!
您可以将助手放在特定控制器的 view/helpers
文件夹中,这样它就只对该控制器可见。
如果您需要根据操作更改它,您还可以为助手添加新路径 $this->view->setHelperPath('MyScripts/View/Helper/','MyScripts_View_Helper');
。
如果您只想拥有一个视图助手,您可以有效地使用变量。
你可以尝试这样的事情:
在您的 foo 操作中:
$this->view->type = 'action_foo';
在您的视图助手中:
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
}