php – Yii1:Controller :: beforeRender in Yii2
发布时间:2020-12-13 17:28:51 所属栏目:PHP教程 来源:网络整理
导读:我正在将Yii1开发的一个旧应用程序迁移到Yii2. 我曾经在控制器中有一个数组,它存储了我需要作为JavaScript发送到前端的所有变量: public $jsVars;public function toJSObject($params){ $this-jsVars = array_merge($this-jsVars,$params);}private functio
我正在将Yii1开发的一个旧应用程序迁移到Yii2.
我曾经在控制器中有一个数组,它存储了我需要作为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. 那么在控制器中我也习惯了: public function beforeRender($view){ $this->printJSVarsObject(); } 在Yii2中,我必须使用自定义视图配置View组件,然后附加事件: namespace appclasses; use yiibaseEvent; use yiihelpersJson; Event::on(yiiwebView::className(),yiiwebView::EVENT_END_BODY,function($event) { $event->sender->registerJSVars(); }); class View extends yiiwebView { 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' ); } } 但是,除了课外活动对我来说似乎很奇怪.此外,当我在控制器中时,我将无法使用我以前的方法使用这种方法. 显然,我错过了一些东西,或者我的方法是错误的. 你们怎么这样做?
如果您尝试从视图访问控制器的属性(请参阅上述注释!),可以使用;
$this->context 从视图文件中返回当前使用的控制器的实例.所以要访问你将要使用的beforeRender()方法 $this->context->beforeRender() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |