从Zend Framework的视图中访问任意帮助器

时间:2011-05-05 15:22:10

标签: zend-framework helper

假设我在某种观点中,我想在一些无关的帮助中访问一个方法:

<?= $this->otherHelper->doSomething() ?>

我怎么会这样做?而且,我可以让我的方法的命名与我的类的最后一部分(Zend_View_Helper_OtherHelper)不同吗?

1 个答案:

答案 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();