我在Zend Framework 1中有我的应用程序。我使用Zend_Auth来管理会话。下面是我在IndexController类中检查身份验证的方法:
class IndexController extends Zend_Controller_Action
{
public function init()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
public function indexAction()
{
}
}
基本上它只是将用户的视图变量设置为auth对象中的任何内容。在我的视图中,我可以检查用户变量是否已设置并正确操作(例如,显示"欢迎汤姆!"以及注销链接)
但是,此功能在我的其他控制器中尚不可用。而不是在每个init()方法中复制相同的代码,我该怎么做?我不太确定在哪里放置代码。
更新:
我尝试在bootstrap文件中执行类似的操作:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
}
..但我收到以下错误:Notice: Indirect modification of overloaded property Bootstrap::$view has no effect in /var/www/budgetz/application/Bootstrap.php on line 9 Warning: Creating default object from empty value in /var/www/budgetz/application/Bootstrap.php on line 9
。
答案 0 :(得分:1)
您可以使用继承自Zend_Controller_Action
的抽象类,如下所示:
abstract Class Yourlibrary_Controller_ControllerAbstract extends Zend_Controller_Action
{
public function preDispatch()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$this->view->user = $auth->getIdentity();
}
}
}
您的控制器继承Yourlibrary_Controller_ControllerAbstract
而不是Zend_Controller_Action