Zend Framework如何从Zend_Session_Namespace打印登录的用户名

时间:2011-03-18 23:55:15

标签: zend-framework

大家好我已经为我的网站创建了以下登录控制器,它可以在登录用户时记录用户。我想做的事情就是将登录的用户名称回到FlashMessenger中以获取成功页面,因为我的代码代表我只有在重定向到成功页面时才会收到以下消息:“您已成功登录为Array”。 我还可以问下面的行$ session-> user = $ adapter> getResultArray('Password');创建一个用户信息数组,减去数据库中的密码值。

非常感谢,

IrishStudent76

 <?php
 class LoginController extends Zend_Controller_Action
 {
  public function init(){    

        $this->view->doctype('XHTML1_STRICT');

 }

 // login action
public function loginAction()
{
 $form = new PetManager_Form_Login;
 $this->view->form = $form;    

 /* 
   check for valid input from the form and authenticate using adapter
   Add  user record to session and redirect to the original request URL if present
*/
 if ($this->getRequest()->isPost()) {
  if ($form->isValid($this->getRequest()->getPost())) {
    $values = $form->getValues();

    $adapter = new PetManager_Auth_Adapter_Doctrine(
      $values['username'], $values['password']
    );
    $auth = Zend_Auth::getInstance();
    $result = $auth->authenticate($adapter);
    if ($result->isValid()) {
      $session = new Zend_Session_Namespace('petmanager.auth');
      $session->user = $adapter->getResultArray('Password');
      if (isset($session->requestURL)) {
        $url = $session->requestURL;
        unset($session->requestURL);
        $this->_redirect($url);  
      } else {
        $this->_helper->getHelper('FlashMessenger')
                      ->addMessage('You have been successfully logged in as '.$session-  >user);
        $this->_redirect('/login/success');
      }
    } else {
      $this->view->message = 'You could not be logged in. Please try again.';          
    }        
  }
 }
}

public function successAction() 
{
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) {
  $this->view->messages = $this->_helper
                               ->getHelper('FlashMessenger')
                               ->getMessages();    
} else {
  $this->_redirect('/login');    
}     
}

public function logoutAction()
{
Zend_Auth::getInstance()->clearIdentity();
Zend_Session::destroy();
$this->_redirect('/');
}

}

2 个答案:

答案 0 :(得分:1)

这是您设置$ session-&gt;用户的位置,您稍后会尝试将其集成到消息中:

$session->user = $adapter->getResultArray('Password');

如您所见,您正在获取结果数组,因此难怪$ session-&gt;用户存储数组。为什么不使用$auth->getIdentity()来获取用户名?

我会考虑阅读the manual,它会以非常明确的方式显示所有内容!

答案 1 :(得分:0)

您不需要滚动自己的会话身份验证存储,这些内置于Zend_Auth

尝试这样的事情......

if ($result->isValid()) {
  $identity = $adapter->getResultArray('Password');
  $auth->getStorage()->write($identity);
  $session = new Zend_Session_Namespace('petmanager.auth');
  if (isset($session->requestURL)) {
    $url = $session->requestURL;
    unset($session->requestURL);
    $this->_redirect($url);  
  } else {
    $this->_helper->getHelper('FlashMessenger')
                  ->addMessage('You have been successfully logged in as '.$identity['NameColumn']);
    $this->_redirect('/login/success');
  }
} else {
  $this->view->message = 'You could not be logged in. Please try again.';          
}