我正在将在Yii1中开发的旧应用程序迁移到Yii2。
我曾经在控制器中有一个数组,它存储了我需要作为JavaScript发送到前端的所有变量:
Sub Refresh_pivot()
Sheets("Control").Select
Application.ScreenUpdating = False
Dim pt As PivotTable
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
Application.ScreenUpdating = True
Application.Goto Reference:="returncell"
Range("A15").Select
End Sub
当我需要在Javascript中公开变量时,我只想在视图或控制器中使用$ this-> toJSObject。
然后,在控制器中我也曾经:
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
}
在Yii2中,我必须使用自定义视图配置View组件,然后附加一个事件:
public function beforeRender($view){
$this->printJSVarsObject();
}
但是,在课堂外举办活动对我来说似乎很奇怪。此外,当我在控制器中时,我将无法使用此方法使用此方法。
显然,我错过了一些东西,或者我的方法不正确。
你们是怎么做到的?
答案 0 :(得分:3)
如果您尝试从视图中访问控制器的属性(请参阅上面的注释!),您可以使用;
$this->context
从视图文件中返回当前使用的控制器的实例。因此,要访问您的beforeRender()
方法,您只需使用
$this->context->beforeRender()