Yii Controller成员变量范围

时间:2014-01-14 20:02:08

标签: yii

我们可以在其公共成员变量=>内存储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

1 个答案:

答案 0 :(得分:3)

没有

了解HTML请求本身就是无状态的。因此,一个页面请求与下一个请求无关。

因此,当呈现page1时,控制器已经完成执行。与page1交互时,您的网页未连接到控制器。因此,您必须使用Ajax发送此信息,如您所示,有效地发送另一个页面“操作”请求。

您可以使用会话连接这两个页面请求。因此,您的行动将会阅读

function actionAction() {
   Yii::app()->session['transientIdData'] = Yii::app()->request->getQuery('id', NULL);
}

稍后(例如在另一个页面请求中),您可以访问变量

   echo Yii::app()->session['transientIdData'];