Zend_Auth快速并随处访问UserID

时间:2011-12-03 15:54:32

标签: php zend-framework zend-auth

我有一个带有用户身份验证的Zend应用程序。几乎每个数据库查询操作都需要UserID。当然,我希望主要在控制器中以及视图脚本中快速访问。

我到目前为止的方式:

Zend_Auth::getInstance()->getIdentity()->User_ID

如何编写插件或帮助程序以更简单的方式提供UserID?

e.g。像这样:

$this->User_ID

2 个答案:

答案 0 :(得分:3)

你可以在你的控制器中创建属性,可以在控制器构造函数中设置:

$this->_User_ID = Zend_Auth::getInstance()->getIdentity()->User_ID;

或从那里建立和使用时将其放到Zend_Registry

答案 1 :(得分:1)

这是一个将用户id注入视图的插件,或者如果用户没有身份则将其设置为null。

<?php

class Application_Plugin_Identity extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $front     = Zend_Controller_Front::getInstance();
        $bootstrap = $front->getParam('bootstrap');

        $bootstrap->bootstrap('view');
        $view = $bootstrap->getResource('view');

        if (Zend_Auth::getInstance()->hasIdentity()) {
            $view->User_ID = Zend_Auth::getInstance()->getIdentity()->User_ID;
        } else {
            $view->User_ID = null;
        }
    }
}

要启用它,您可以在这样的引导方法中注册它:

Zend_Controller_Front::getInstance()
->registerPlugin(new Application_Plugin_Identity());

现在,您可以在任何视图脚本中引用$this->User_ID,它将包含用户的ID,如果未登录则为null。

更新:

如果您最想从控制器访问动作帮助程序,则动作帮助程序效果很好。

在您的控制器中,拨打$userId = $this->_helper->Identity();以获取用户ID。作为奖励,我让它将用户ID分配给视图,因此从视图中您可以调用$this->User_ID

<?php

class My_Helper_Identity extends Zend_Controller_Action_Helper_Abstract
{
    protected static $_userId = null;

    public function direct()
    {
        if ($this->_userId == null) {
            $request  = $this->getRequest();
            $view     = $this->getActionController()->view;

            if (Zend_Auth::getInstance()->hasIdentity()) {
                $user_id = Zend_Auth::getInstance()->getIdentity()->User_ID;
            } else {
                $user_id = null;
            }

            $view->User_ID = $user_id;
            $this->_userId = $user_id;
            $this->getActionController()->_userId = $user_id;
        }

        return $this->_userId;
    }
}