我是 Zend Framework 的新手,我有一个关于使用 Zend_Session_Namespace 创建 session 和访问变量的问题。
我想我的问题有两个部分,首先是我是否正确创建了 session ,其次我如何回显变量以测试我是否正确执行。
第 1 部分 从我读到的内容来看,这就是我所做的。
在我的 Bootstrap 文件中,我创建了以下函数
protected function _initSession()
{
Zend_Session::start();
$sessionUserRole = new Zend_Session_Namespace('sessionUserRole');
}
在我的登录 Controller 中,它基于我从 Zend Framework 获得的代码,一个初学者指南,我为上面的内容创建了一个新的命名空间。
// 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('username','Password');
// $sessionUserRole not Working ?????????
$sessionUserRole = new Zend_Session_Namespace('sessionUserRole');
foreach($this->getRole() as $r)
{
$sessionUserRole->userRole = $r['userType'];
}
if (isset($session->requestURL)) {
$url = $session->requestURL;
unset($session->requestURL);
$this->_redirect($url);
} else {
$this->_helper->getHelper('FlashMessenger')
->addMessage('Welcome '.$auth->getIdentity().'. You have been successfully logged in.');
$this->_redirect('/login/success');
}
} else {
$this->view->message = 'You could not be logged in. Please try again.';
}
}
}
}
public function getRole()
{
$q = Doctrine_Query::create()
->select('u.userType')
->from('PetManager_Model_Users u')
->where('u.name = ?', $values['username']);
$result = $q->fetchArray();
return $result;
}
是我为 $sessionUserRole = new Zend_Session_Namespace('sessionUserRole'); 写的代码吗?正确的??我确定它不是当我尝试在我的用户 Controller 中实现它以重定向非管理员用户时没有重定向操作。我知道这可以通过 Zend ACL 完成,但我想这样做,这是我学习 session_namespace 的第一步。
第 2 部分 我怎样才能回显我试过的 session 变量的值 $sessionUserRole->userRole;?> 但我一无所获。
抱歉,我知道有很多问题要问,但我发现 Zend 站点上几乎不存在关于此的文档,而且那里的内容非常晦涩,或者也许只有我自己 :-( 。
最佳答案
根据 Tims 评论,您的方法 getRoles 没有那里的用户名 sql 查询.. 现在我们将其作为参数提供给方法。
如果你想在没有 Zend 的情况下访问 Session,只需使用:var_dump($_SESSION);
// login action
public function loginAction()
{
$form = new PetManager_Form_Login();
$this->view->form = $form;
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('username','Password');
$sessionUserRole = new Zend_Session_Namespace('sessionUserRole');
// username from form
foreach ($this->getRole($values['username']) as $r) {
$sessionUserRole->userRole = $r['userType'];
}
if (isset($session->requestURL)) {
$url = $session->requestURL;
unset($session->requestURL);
$this->_redirect($url);
} else {
$this->_helper->getHelper('FlashMessenger')->addMessage(
'Welcome ' . $auth->getIdentity() .
'. You have been successfully logged in.'
);
$this->_redirect('/login/success');
}
} else {
$this->view->message = 'You could not be logged in. Please try again.';
}
}
}
}
/**
* Get role for an user
*
* @param string $username User
*
* @return array roles
*/
public function getRole($username)
{
$q = Doctrine_Query::create()->select('u.userType')
->from('PetManager_Model_Users u')
->where('u.name = ?', $username);
$result = $q->fetchArray();
return $result;
}
关于php - 使用 Zend_Session_Namespace 创建 session 和访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605604/