Yii1:Yii2中的Controller :: beforeRender

时间:2017-05-03 10:16:55

标签: php yii yii2

我正在将在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();
}

但是,在课堂外举办活动对我来说似乎很奇怪。此外,当我在控制器中时,我将无法使用此方法使用此方法。

显然,我错过了一些东西,或者我的方法不正确。

你们是怎么做到的?

1 个答案:

答案 0 :(得分:3)

如果您尝试从视图中访问控制器的属性(请参阅上面的注释!),您可以使用;

$this->context

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

$this->context->beforeRender()