我们可以在其公共成员变量=>内存储YII控制器吗?一些瞬态数据,例如点击的div的id来自javascript =>用于像莫代尔这样的视图?
示例 - 有部分观点:
<div id="abc" ></div>
JS: - 单击“abc”时,将向Yii发送一个请求,其id为param /控制器/动作/ ID / ABC
会员var: - public $ transientIdData;
内部操作,读取id = abc,然后在成员变量中设置该id: - $ transientIdData =“abc”
像fancybox这样的另一个局部视图必须得到这个id,并在JS点击后调用。它可以从刚刚点击的Id的Controller的成员变量瞬态数据中获得。
所以我的问题 -
(i) Can we save such per request data in Yii Controller's member var.
(ii) Is there a better pattern for achieving this behaviour
答案 0 :(得分:3)
没有
了解HTML请求本身就是无状态的。因此,一个页面请求与下一个请求无关。
因此,当呈现page1时,控制器已经完成执行。与page1交互时,您的网页未连接到控制器。因此,您必须使用Ajax发送此信息,如您所示,有效地发送另一个页面“操作”请求。
您可以使用会话连接这两个页面请求。因此,您的行动将会阅读
function actionAction() {
Yii::app()->session['transientIdData'] = Yii::app()->request->getQuery('id', NULL);
}
稍后(例如在另一个页面请求中),您可以访问变量
echo Yii::app()->session['transientIdData'];