我的问题:我无法访问视图中的会话数据,我在渲染视图之前尝试将其保存在控制器中。 在我看来,存储会话数据时出错。 (我需要在创建会话数据后修改会话数据,而不仅仅是在单个操作中。)
ProcessController.php
public function actionNew() {
$formhash = md5(time());
$hashList = array();
$hashList[$formhash]['processingNumber'] = '';
//fill with empty model
$hashList[$formhash]['model'] = $this->loadModel();
//store hashList in session
Yii::app()->session['hashList'] = $hashList;
$this->render('/process', array('hashValue => $formHash));
}
现在在视图中我需要会话中的数据向用户显示它们。但是当转储hashList时,它只会转储“null”(可能因为控制器中的保存效果不佳)。
process.php
<?php
$form = this->beginWidget('CActiveForm', array(
'id' => 'process_form',
//several other things...
));
//Output: null
CVarDumper::dump(Yii::app()->session['hashList'],10,true);
?>
我尝试使用$ _SESSION而不是Yii :: app() - &gt; session,这使我可以访问视图中的数据。但是当在Controller中处理其他操作时,$ _SESSION变量是未定义的。
有什么建议吗?
谢谢。
答案 0 :(得分:1)
答案很长:
关于这个documents:
$session=new CHttpSession;
$session->open();
$value1=$session['name1']; // get session variable 'name1'
$value2=$session['name2']; // get session variable 'name2'
foreach($session as $name=>$value) // traverse all session variables
$session['name3']=$value3; // set session variable 'name3'
您也可以使用:
Yii::app()->session->set('hashList', $hashList);
Yii::app()->session->get('hashList');
再次设置。
除了这个会话之外,为什么不使用它:
$this->render('/process', array('hashValue => $formHash, 'hashList' => $hashList));
因此,如果您可以直接将其保存到视图中,则无需将其保存在会话中。
答案 1 :(得分:0)
根据文档,您的代码应该有效。另一种方法可能是使用以下内容,但相同:
Yii::app()->session->add('hashList', $hashList); // set the value
$hashList = Yii::app()->session->get('hashList'); // get the value
我希望问题是调试问题,这意味着您已经观察到缓存或其他过时的数据,或者代码中未显示的部分问题。