gpt4 book ai didi

php - Yii1:Yii2 中的 Controller::beforeRender

转载 作者:可可西里 更新时间:2023-10-31 22:15:41 24 4
gpt4 key购买 nike

我正在将 Yii1 中开发的旧应用程序迁移到 Yii2。

我曾经在 Controller 中有一个数组,用于存储我需要作为 JavaScript 发送到前端的所有变量:

public $jsVars;
public function toJSObject($params){
$this->jsVars = array_merge($this->jsVars, $params);
}

private function printJSVarsObject(){
//convert my php array into a js json object
}

当我需要在 Javascript 中公开一个变量时,我会在 View 或 Controller 中使用 $this->toJSObject。

然后,在 Controller 中我也曾经有过:

public function beforeRender($view){
$this->printJSVarsObject();
}

在 Yii2 中,我必须使用自定义 View 配置 View 组件,然后附加一个事件:

namespace app\classes;

use yii\base\Event;
use yii\helpers\Json;

Event::on(\yii\web\View::className(), \yii\web\View::EVENT_END_BODY, function($event) {
$event->sender->registerJSVars();
});

class View extends \yii\web\View {
public $jsVars = [];

public function addJsParam($param){
$this->jsVars = array_merge($this->jsVars, $param);
}

public function registerJSVars() {
$this->registerJs(
"var AppOptions= " . Json::htmlEncode($this->jsVars) . ";",
View::POS_END,
'acn_options'
);
}
}

但是,在课外举办事件对我来说似乎很奇怪。此外,当我在 Controller 中时,我将无法使用我以前使用此方法的方法。

显然,我遗漏了什么,或者我的方法不正确。

你们是怎么做到的?

最佳答案

如果您尝试从 View 访问 Controller 的属性(请参阅上面的评论!),您可以使用;

$this->context

从 View 文件中返回当前使用的 Controller 实例。因此,要访问您的 beforeRender() 方法,您只需使用

$this->context->beforeRender()

关于php - Yii1:Yii2 中的 Controller::beforeRender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com