我有一个带有用户身份验证的Zend应用程序。几乎每个数据库查询操作都需要UserID。当然,我希望主要在控制器中以及视图脚本中快速访问。
我到目前为止的方式:
Zend_Auth::getInstance()->getIdentity()->User_ID
如何编写插件或帮助程序以更简单的方式提供UserID?
e.g。像这样:
$this->User_ID
答案 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;
}
}