我最近开始使用Zend Framework,并且我已经完全爱上它了,甚至为了支持而退役了自己的框架。Zend Framework重复功能
但是我错过了一些可能如此痛苦明显的事情,你会轻笑一下。
我有一个登录系统,在每个控制器中,我必须检查登录状态,我看了一下访问引导程序中的Zend会话存储,但我处于截止日期,不能能够浪费时间,有没有更好的方法来检查IE中的bootstrap?而不是在每个控制器中重复使用20多行代码和功能。
在此先感谢!
我最近开始使用Zend Framework,并且我已经完全爱上它了,甚至为了支持而退役了自己的框架。Zend Framework重复功能
但是我错过了一些可能如此痛苦明显的事情,你会轻笑一下。
我有一个登录系统,在每个控制器中,我必须检查登录状态,我看了一下访问引导程序中的Zend会话存储,但我处于截止日期,不能能够浪费时间,有没有更好的方法来检查IE中的bootstrap?而不是在每个控制器中重复使用20多行代码和功能。
在此先感谢!
您可以使用一个控制器插件。请参阅:http://framework.zend.com/manual/en/zend.controller.plugins.html
class Your_Plugin_Login extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if (!Zend_Auth::getInstance()->hasIdentity()) {
// send the user to the login page
$request->setControllerName('login')
->setActionName('login');
}
}
}
与任何适合你的登录页面更换控制器/动作名称,和“你”与应用程序的命名空间。
然后,您可以使用Front控制器将该插件注册到application.ini文件中,或者使用Zend_Controller_Front::getInstance()->registerPlugin(new Your_Plugin_Login());
的引导程序注册该插件。
编辑:如果您想将用户详细信息视图,以及,你可以这样做:
$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$view->user = Zend_Auth::getIdentity();
我其实更喜欢这个我的方法 - 真的很好,低维护混合一些功能的方法。尽管如果有用户登录,您将如何使用此方法使控制器可访问用户详细信息? – wheresrhys 2012-02-03 11:26:56
您可以以类似的方式访问视图对象并将其存储在其中。我已经编辑了我的答案,以包含此示例。 – 2012-02-03 12:31:10
以下是由ZF的领导程序员开发的登录窗口小部件/登录管理器的示例:http://mwop.net/blog/246-Using-Action-Helpers-To-Implement-Re-Usable-Widgets它可以轻松地适应成为控制器插件 – 2012-02-03 13:31:18
你可以编写自己的控制器,继承自Zend Controller(调用它,例如DaveMac_Controller - 你可以在应用程序的配置文件中定义前缀,以便应用程序可以自动加载它(并且你需要小心你保存的目录你的班级))。在这个类的构造函数中运行验证检查。然后将所有页面的控制器从DaveMac_Controller继承,而不是默认的zend继承。
如果我在家里,我可以复制和粘贴一些代码作为例子,但现在正在工作,所以希望上面的轮廓就足够了。
*编辑好醇”的Dropbox :)
的application.ini
includePaths.library = APPLICATION_PATH "/../library"
autoloaderNamespaces[] = "DaveMac_"
/../library/DaveMac/Controller/Action.php
<?php
class DaveMac_Controller_Action extends Zend_Controller_Action {
protected $acl;
protected $user;
protected $userRole;
public function init() {
//retrieve and store user details
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){
$user = $auth->getIdentity();
$this->user = $user;
$this->view->user = $user;
$this->userRole = $user->role;
} else {
$this->userRole = "guest";
}
//Initialise access control list
$this->acl = new DaveMac_Acl();
}
protected function checkAuth($pageLevel, $redirect = "/") {
if($this->user) {
if(!$this->acl->isAllowed($this->userRole, $pageLevel)) {
$this->_redirect($redirect);
}
} else if ($pageLevel != DaveMac_Resources::PUBLIC_ONLY_PAGE) {
$this->_redirect('/login/returnurl/' . str_replace('/','-',$this->getRequest()->getRequestUri()));
}
}
}
你可能已经有自己的功能fdor检查认证,但我想我会离开我的反正
同样在这里,我也探索它与Zend的是真棒......顺便说一句,你可以看看进入这可能会帮助你 - > http://stackoverflow.com/questions/2306374/show-login-form-on-every-page-using-zend-form – Rikesh 2012-02-03 09:23:41