我最近開始使用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