我的问题:我无法访问视图中的会话数据,我在渲染视图之前尝试将其保存在控制器中.在我看来,存储会话数据时出错.(我必须在创建会话数据后修改会话数据,而不仅仅是在单个操作中.)
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));
Run Code Online (Sandbox Code Playgroud)
}
现在在视图中我需要会话中的数据向用户显示它们.但是当转储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);
?>
Run Code Online (Sandbox Code Playgroud)
我尝试使用$ _SESSION而不是Yii :: app() - > session,这使我可以访问视图中的数据.但是当在Controller中处理其他操作时,$ _SESSION变量是未定义的.
有什么建议?
谢谢.
长答案是:
关于本文件:
$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'
Run Code Online (Sandbox Code Playgroud)
您也可以使用:
Yii::app()->session->set('hashList', $hashList);
Yii::app()->session->get('hashList');
Run Code Online (Sandbox Code Playgroud)
并再次设置。
除了这个会话之外,你为什么不使用这个:
$this->render('/process', array('hashValue => $formHash, 'hashList' => $hashList));
Run Code Online (Sandbox Code Playgroud)
因此,如果您可以直接在视图中访问它,则无需将其保存在会话中。