【问题标题】:Yii Controller member variable scopeYii 控制器成员变量作用域
【发布时间】:2014-01-14 20:02:07
【问题描述】:

我们能否在 YII 控制器的公共成员变量中存储一些瞬态数据,例如从 javascript 传递的单击 div 的 id => 用于模态视图之类的视图?

示例 - 有一个局部视图:

<div id="abc" ></div>

JS:- 当点击“abc”时,将向 Yii 发送一个请求,并以这个 id 作为参数 /controller/action/id/abc

控制器:-

成员变量:- 公共 $transientIdData;

在内部操作中,读取 id = abc 然后我将该 id 设置在成员变量中:- $transientIdData = "abc"

查看:-

另一个像fancybox这样的局部视图必须得到这个id,然后被JS点击后调用。可以从Controller的成员变量中获取刚刚点击的Id的瞬态数据。

所以我的问题 -

(i) Can we save such per request data in Yii Controller's member var. 
(ii) Is there a better pattern for achieving this behaviour

【问题讨论】:

    标签: yii


    【解决方案1】:

    没有。

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

    因此,当 page1 被渲染时,控制器已经完成了执行。当您与 page1 交互时,您的网页未连接到控制器。因此,正如您所指出的,您必须使用 Ajax 发送此内容,有效地发送页面“操作”的另一个请求。

    您可以使用会话连接这两个页面请求。因此,您的操作将读取

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      相关资源
      最近更新 更多