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

在Yii中,将PHP变量传递给JavaScript,javascript,yii,Javascript,Yii,在我的JavaScript(使用jQuery)中,有一整套我需要访问的PHP变量。我只需将JavaScript文件作为视图生成,然后使用renderPartial()在主视图中回显JavaScript,就可以让它正常工作 然而,这显然不是很优雅,所以我想知道‘Yii’的做法。我一直在研究Assets Manager,但这似乎是针对静态JavaScript文件的——您不能在其中包含PHP(除非我错了) 还有其他方法吗?您的方法没有本质上的错误或不雅观,是的,资产是静态内容(JS、CSS等)——与问

在我的JavaScript(使用jQuery)中,有一整套我需要访问的PHP变量。我只需将JavaScript文件作为视图生成,然后使用
renderPartial()
在主视图中回显JavaScript,就可以让它正常工作

然而,这显然不是很优雅,所以我想知道‘Yii’的做法。我一直在研究Assets Manager,但这似乎是针对静态JavaScript文件的——您不能在其中包含PHP(除非我错了)


还有其他方法吗?

您的方法没有本质上的错误或不雅观,是的,资产是静态内容(JS、CSS等)——与问题无关

基本上,您只能将PHP变量的值作为PHP代码的一部分写入JS,从而在JS中公开它。如果您只需要在有限的范围内使用该值,那么您可以将其作为内联常量写入(例如,一些小部件就是这样做的)。如果您需要它在整个JS代码中都可用,那么唯一的选择就是像现在一样生成JS代码


严格来说,没有必要为PHP到JS变量创建新的局部视图,但这也是一个不错的主意。如果你对它感到满意,一定要用它。

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

方法之一是通过一个小脚本和redisterScript()设置全局变量,然后在real js中使用这个变量,在key=>值数组中设置变量,使用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

试着这样做:

$myVarList=数组(
'nameOne'=>$valueFromAnotherVar,
“名称二”=>$object->coolValue,
'nametree'=>$cat->hoursSleptToday()
);

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

Yii::app()->clientScript->registerScript(“myVarList”,“myVarList= parseJSON(“.$json.”;”)

请参阅,您可以使用函数将变量传递给javascipt。例如:

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

我是否将JavaScript作为
$script
参数从视图中返回?@Blowski实际上我同意Jon的回答。registerScript只是一个用来呈现脚本的工具。在我看来,它更好,因为您可以用它控制yii(脚本的位置)的进程输出。