假设我在某种观点中,我想在一些无关的帮助中访问一个方法:
<?= $this->otherHelper->doSomething() ?>
我怎么会这样做?而且,我可以让我的方法的命名与我的类的最后一部分(Zend_View_Helper_OtherHelper)不同吗?
答案 0 :(得分:4)
如果您的助手延伸Zend_View_Helper_Abstract
且位于同一模块中,则您只需拨打$this->view->otherHelper()
即可。
如果它位于不同的模块中,那么您可能需要在$view
上指定一些额外的辅助路径。
如果要为调用使用备用方法,可以直接实例化OtherHelper
类并调用备用方法。但在这种情况下,视图的已注册帮助程序路径将无法帮助您进行自动加载,因此您必须确保自动加载器配置了正确的名称空间和前缀/路径映射。
<强>更新强>
重新阅读你的问题,关于在视图助手上调用其他方法的一些额外想法。
如果您自己编写另一个视图助手 - 而不是简单地使用已经编写的视图助手 - 您可以使用直接调用返回对自身的引用的结构。然后你可以在同一个帮助器上使用一个流畅的接口调用各种方法。像这样:
class My_View_Helper_GreetMe extends Zend_View_Helper_Abstract
{
protected $_name;
public function greetMe($name)
{
$this->_name = $name;
return $this;
}
public function withCompliment()
{
return sprintf('Hi, %s. You look great today!', $this->_name);
}
public function withPutDown()
{
return sprintf('Hey, %s, you look like hell. Drunk again, are you?', $this->_name);
}
// The default representation of the greeting. Let's be nice, by default.
public function __toString()
{
return $this->withCompliment();
}
}
然后用法可能是:
$view->greetMe('David')->withCompliment();