在Yii中,将PHP变量传递给JavaScript

时间:2012-01-18 15:16:19

标签: javascript yii

在我的JavaScript中(使用jQuery),我需要访问一整套PHP变量。虽然我只是将JavaScript文件作为视图生成,然后使用renderPartial()来回显主视图中的JavaScript。

然而,这显然不是很优雅,所以我想知道'Yii'的做法。我一直在看Assets Manager,但这似乎是针对静态JavaScript文件 - 你不能在那里包含PHP(除非我错了)。

还有另一种方法吗?

5 个答案:

答案 0 :(得分:2)

您可以考虑registerScript。在我看来,它更好,因为有一个名为$ position的参数,它可以帮助你控制render()的进程输出。

答案 1 :(得分:1)

方法之一是通过一个小脚本和redisterScript()设置全局变量,然后在真实的js中使用这个变量

答案 2 :(得分:1)

在key => value数组中设置变量并使用CJSON :: encode非常有效。您可以通过jQuery的parseJSON创建的对象访问所有变量。例如:

$myVarList = array(
 'nameOne'=>$valueFromAnotherVar,
 'nameTwo'=>$object->coolValue,
 'nameThree'=>$cat->hoursSleptToday()
);

Yii::app()->clientScript->registerScript("myVarList",
    'myVarList = jQuery.parseJSON('.CJSON::encode($myVarList).');'

然后,您可以访问全局变量

中的值
myVarList.nameOne || myVarList.nameTwo || myVarList.nameThree

答案 3 :(得分:1)

参考Yii2 - Client Scripts Documentation,您可以使用registerJS函数将变量传递给javascipt。例如:

/* @var $this yii\web\View */
$this->registerJs(
    "var calenderEvents = ".Json::encode($calenderEvents).";", 
    yii\web\View::POS_HEAD, 
    'calender-events-script'
);

答案 4 :(得分:0)

尝试这样做:

  

$ myVarList = array(
     '名称一' = GT; $ valueFromAnotherVar,
     ' nameTwo' = GT; $对象 - > coolValue,
     ' nameThree' = GT; $ CAT-> hoursSleptToday()
   );

     

$ json = addslashes(CJSON :: encode($ myVarList));

     

Yii :: app() - > clientScript-> registerScript(" myVarList",' myVarList =   jQuery.parseJSON("'。$ json。'");');