Php 使用Zend_Session_名称空间创建会话和访问变量
我是Zend框架的新手,对于使用Zend_会话_名称空间创建会话和访问变量,我有一个问题 我想我的问题有两部分,第一部分是我是否正确创建会话,第二部分是我如何回显变量以测试我是否正确创建会话 第一部分 从我所读到的,这就是我所做的 在我的引导文件中,我创建了以下函数Php 使用Zend_Session_名称空间创建会话和访问变量,php,zend-framework,Php,Zend Framework,我是Zend框架的新手,对于使用Zend_会话_名称空间创建会话和访问变量,我有一个问题 我想我的问题有两部分,第一部分是我是否正确创建会话,第二部分是我如何回显变量以测试我是否正确创建会话 第一部分 从我所读到的,这就是我所做的 在我的引导文件中,我创建了以下函数 protected function _initSession() { Zend_Session::start(); $sessionUserRole = new Zend_Session_Nam
protected function _initSession()
{
Zend_Session::start();
$sessionUserRole = new Zend_Session_Namespace('sessionUserRole');
}
在我的登录控制器中,基于我从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=newZend_Session_名称空间(“sessionUserRole”)编写的代码;对的我敢肯定,当我试图在我的用户控制器中实现它以重定向非管理员用户时,并没有重定向操作。我知道这可以通过Zend ACL完成,但我想这样做,这是我学习会话名称空间的第一步
第二部分
如何回显我尝试过的会话变量的值
$sessionUserRole->userRole;?>
但是我什么也得不到
抱歉,我知道有很多问题要问,但我发现Zend站点上几乎没有关于这方面的文档,而且其中的内容非常迟钝,或者可能只有我:-(.根据Tims的评论,您的方法getRoles没有用户名 sql查询..现在我们将其作为参数提供给该方法 如果希望在没有Zend的情况下访问会话,只需使用:
var\u dump($\u Session);
看起来“还可以”..u会话全局数组中有什么?getRole方法中的$值来自何处?我建议在foreach循环中添加一些调试代码,看看是否有角色添加到会话中。@ArneRie我是个新手,不知道如何在Zend中访问它sorry@TimFountain$值来自我的登录表单,所以我确定他们至少在允许我登录时有一个值。但我要看看$values来自登录位中的表单,但是getRole函数有自己的作用域,并且$values从未设置过(除非它是在您未发布的代码的一部分中完成的)是的,你的回答是正确的。我看到了我在Tims评论中犯的错误,并通过添加参数对其进行了排序。这是代表我犯的愚蠢错误。我可能是Zend的新手,但即使是我也应该发现这一点。
// 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;
}