zend,我不能打电话给任何助手

时间:2011-08-02 15:10:31

标签: zend-framework

我的视图文件夹中有一个帮助文件夹,其中包含一个名为Log.php的帮助程序 /views/helpers/log.php

包含:

class Zend_View_Helper_Log extends Zend_View_Helper_Abstract 
{
    public function loggedAs ()
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $username = $auth->getIdentity()->uname;
            $logoutUrl = $this->view->url(array('controller'=>'auth', 'action'=>'logout'), null, true);
            return 'Hello' . $username .  '. <a href="'.$logouturl.'">Logout?</a>';
        } 


    }
}

我如何从布局中调用它?或观点?我尝试了$ this-&gt; _helpers-&gt; log-&gt; loggedAs();

但不显示任何内容,只是一个错误:致命错误:在...中的非对象上调用一个成员函数loggedAs()

2 个答案:

答案 0 :(得分:1)

我对ZF有一点经验。昨天我有同样的问题,我决定使用以下代码。 在主Bootstrap.php我定义了帮助器路径和前缀

protected function _initDoctype()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype('XHTML1_STRICT');

    $view->addHelperPath(APPLICATION_PATH . "/../library/My/Helper/View", "My_Helper_View");
}

之后在视图文件中我使用了下一个语法

$this->getPhoneString($value['per_telephone_number']);

我的帮助程序类中的 getPhoneString 方法 My_Helper_View_GetPhoneString

希望这个例子对你有用:)

答案 1 :(得分:0)

你的助手类应该有一个与助手名称相匹配的方法,这就是你所说的。因此,如果您想从模板中调用loggedAs(),那么您应该为您的帮助者命名:

class Zend_View_Helper_LoggedAs extends Zend_View_Helper_Abstract 
{
    public function loggedAs()
    {
        $auth = Zend_Auth::getInstance();
        if ($auth->hasIdentity()) {
            $username = $auth->getIdentity()->uname;
            $logoutUrl = $this->view->url(array('controller'=>'auth', 'action'=>'logout'), null, true);
            return 'Hello' . $username .  '. <a href="'.$logouturl.'">Logout?</a>';
        } 
    }
}

这应该存在于application/views/helpers/LoggedAs.php的文件中,您可以在模板中调用它,如下所示:

<?=$this->loggedAs()?>

我还建议在类名中使用自己的命名空间而不是Zend,但是你完成它的方式应该也可以。