首页 > 解决方案 > 将 php 代码放入 yii 框架的 registerScript 中

问题描述

我想在Yii::app()->clientScript->registerScriptyii1里面放一个 php 代码

我怎样才能把它放在这个里面?

<?php Yii::app()->clientScript->registerScript("form", <<<JAVASCRIPT
// I want the PHP code inside of this
JAVASCRIPT, CClientScript::POS_END); ?>

除了在代码中间结束 PHP 之外,还有其他方法吗?

编辑

如果我放在<?PHP ?>中间,我会得到一个错误

解析错误:语法错误,第 275 行 C:\xampp\htdocs\yii\project\protected\views\group_Form.php 中的文件意外结束

那条线是

JAVASCRIPT, CClientScript::POS_END); ?>

标签: javascriptphpyii

解决方案


由于您可以通过视图上下文访问控制器实例$this,因此我建议您执行以下操作:

  1. 创建部分视图 php 文件,您可以在其中构建您的 mixin(js + php),该文件显然将包含任何脚本类型以及 PHP 之上的某些条件。

  2. 在视图上下文中使用CBaseController#renderPartial(根据第三个参数实际上返回字符串而不是渲染return = true)来获取 mixin 视图内容作为字符串并将其作为第二个参数传递给Yii::app()->clientScript->registerScript.

实现如下所示:

// _partial_view.php 
// here is your mixin between js + php
/* @var $this CController */

<?php

echo '<script>' .
   Yii::app()->user->isGuest 
   ? 'alert("you\'re guest")' 
   : 'alert("you\'re logged user")' 
. '</script>';

然后回到你注册的 js 调用:

<?php Yii::app()->clientScript
                ->registerScript("form",
                                 $this->renderPartial('_partial_view.php', [], true), // setting 3rd parameter to true is crucial in order to capture the string content instead of rendering it into the view
                                 CClientScript::POS_END); ?>

推荐阅读