javascript - 将 php 代码放入 yii 框架的 registerScript 中
问题描述
我想在Yii::app()->clientScript->registerScript
yii1里面放一个 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); ?>
解决方案
由于您可以通过视图上下文访问控制器实例$this
,因此我建议您执行以下操作:
创建部分视图 php 文件,您可以在其中构建您的 mixin(js + php),该文件显然将包含任何脚本类型以及 PHP 之上的某些条件。
在视图上下文中使用
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); ?>
推荐阅读
- python - 如何从包含其名称的字符串中选择一个变量?
- android - 如何通过自定义对象从 Firestore 获取文档内容?(安卓 - 科特林)
- vue.js - 是否有在 vue-dropzone 消息区域中加载自定义 HTML 元素的有效解决方案?
- python - 如何处理发生在 Keras 的自定义层中的代码错误?
- javascript - 在 this.state 中使用 JSX,但它被呈现为纯文本
- flutter - Flutter 应用会产生过多的缓存吗?
- html - 导航菜单显示在桌面,但不显示在移动视图中
- python - 了解 GIL 对并发服务器的性能影响
- swift - 如何验证使用 XCTAssert 调用了类方法?
- google-bigquery - `WriteToBigQuery` 和 `BigQuerySink` 之间有什么区别