2011-06-20 120 views
1

我是新來的Zend如何獲取用戶信息,每次用戶訪問zend網站的網頁?

我搜索了它,並得到以下鏈接, how to keep track of currently logged user in zend framework

但我的要求是不同的。

我的情況是,我有一個名爲AuthenticationController的獨立控制器,在會話中使用Zend_Auth存儲記錄的用戶詳細信息並執行其他操作,現在我必須獲取登錄的用戶信息,每次登錄時用戶訪問每頁網站。

所以我必須做一些常見的文件中的邏輯,每一次都會觸發zend中的用戶信息。

我該如何在zend中做到這一點?

以下是代碼示例一塊..

if ($form->isValid($request->getPost())) { 
    if ($this->_process($form->getValues())) { 
     $authentication = Zend_Auth::getInstance(); 

     if ($authentication ->getIdentity()->myfirstlogin == 0) { 

      $this->_helper->redirector('index', 'test1'); 

     } else { 

      $this->_helper->redirector('index', 'test2'); 

     } 
    } else { 
     $myUserStatus = new Zend_Session_Namespace('myuserStatus'); 
     if ($myUserStatus ->status == 2) { 
      $this->_helper->FlashMessenger('Incorrect Username/Password'); 
     } else if ($myUserStatus ->delete == 1) { 
      $this->_helper->FlashMessenger('Your **** approval.'); 
     } else { 
      $this->_helper->FlashMessenger('Please ****** administrator'); 
     } 

     unset($myUserStatus); 
     $this->_helper->redirector('index', 'auth'); 
    } 
} 

.......

+0

請分享一些代碼...如果您沒有使用標準方式進行身份驗證...我們不可能知道您在沒有任何代碼的情況下如何執行操作。 – Niklas

+0

@Niklas發佈更新 – mymotherland

回答

2

我相信你已經使用Database Table Authentication &你有stored your results這樣。如果這是正確的。

的,你應該能夠驗證了會議,並得到這樣的細節(在任何你想要的控制器):

To Validate: 

$sessionvars = Zend_Auth::getInstance()->getIdentity(); 
if (!Zend_Auth::getInstance()->hasIdentity()) { 
    $this->_redirect('/'); 
} 
... 
... 
To retrieve the data: 

$userData = Zend_Auth::getInstance()->getIdentity(); 
print_r($userData); 
1

我相信OP想在一個共同文件中的身份驗證檢查。我認爲最好的選擇是製作插件

在庫文件夾中創建一個新類。您可以選擇有不同的文件夾結構,但我用這個例子的文件夾結構庫/自定義/插件/ AuthCheck.php

class Custom_Plugins_AuthCheck extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch (Zend_Controller_Request_Abstract $request) 
    { 

     // checking for identity. We want to avoid the check if this is the login form. 
     if (($request->getModuleName() == 'default' && $request->getControllerName() == 'login')){ 
      return; 
     } 
     else if(!Zend_Auth::getInstance()->hasIdentity()){ // if identity does not exist..redirect to login form 
      $request->setModuleName('default')->setControllerName('login')->setActionName('index'); 
      $request->setDispatched(false); 
     } 

    } 

} 

請注意,我用了一個名爲preDispatch功能。這不是一個隨機的名字選擇。我想每次在我的行動派發之前調用這段代碼。 Zend Framework在這個階段有一個內置的插件調用,它被稱爲preDispatch()

你可以在官方手冊中閱讀更多關於插件here的信息。

現在我們的插件已準備就緒。我們必須註冊這個插件,以便Zend Framework知道每次有preDispatch()插件調用時都必須調用此插件。

,我知道註冊一個插件添加這片線,以最簡單的方式你的application.ini

resources.frontController.plugins.AuthCheck = "Custom_Plugins_AuthCheck" 

現在你的插件將自動爲每個請求調用。

我希望我已經回答了你的問題。如果我在帖子中遺漏了某些內容,請告訴我。

+0

謝謝,我已經盡了自己與一流邏輯已經擺在引導文件中像下面類ModuleLayoutLoader擴展Zend_Controller_Action_Helper_Abstract //通過的application.ini { 公共職能preDispatch)模塊( {查找佈局 ..... } } – mymotherland

+0

這將通過下面的)片代碼 保護的函數的_initLayoutHelper( { $這 - >自舉( 'frontController')調用每次; $ layout = Zend_Controller_Action_HelperBroker :: addHelper( new ModuleLayoutLoader()); } – mymotherland

+0

但我必須用你的方式。 – mymotherland

相關問題