如何以及在哪里编写函数在yii2 basic中的布局(main.php)中使用

时间:2015-12-23 07:30:01

标签: layout yii2-basic-app

之前我在视图页面中创建了一个导航栏,我在相应的控制器中编写了该功能,但现在我必须把它放在主文件(布局)中。但现在我不知道在哪里写这个功能。 我还必须通过包含导航栏值的函数将两个变量传递给布局文件。 我已经尝试了一些方法,但它允许我只返回值。 基本上我想知道我在哪里可以编写以下函数在yii2 basic

的主布局中使用它
public function actionMenutest()
{

    $query = new Query;

    $data= $query->select('name,id')
        ->from('menu')->all();

    $query2 = new Query;

    $data2= $query2->select('name,menu_id')
        ->from('submenu')->all();


    return $this->render('menutest',[
    'data'=>$data, 'data2'=>$data2
        ]);
}

1 个答案:

答案 0 :(得分:1)

您可以使用 EVENT_BEFORE_RENDER 来实现此目的。对于高级应用,以下代码需要进入 common \ config \ bootstrap.php 文件。

use yii\base\Event;
use yii\base\View;

Event::on(View::className(), View::EVENT_BEFORE_RENDER, function() {
    $query = new Query;

    $data= $query->select('name,id')
    ->from('menu')->all();

    $query2 = new Query;

    $data2= $query2->select('name,menu_id')
    ->from('submenu')->all();

    Yii::$app->view->params['data'] = $data;
    Yii::$app->view->params['data2'] = $data2;

});

然后在主要布局中,您可以将模型用作:

$data= $this->params['data'];
$data2= $this->params['data2'];

我还没有使用过基本模板。但您可以尝试以下方法:

config 文件夹中创建 bootstrap.php 文件。

之后更新 web / index.php 文件。将以下代码放在:

require(__DIR__ . '/../config/bootstrap.php');

然后将上面的代码放在 bootstrap.php 文件中。尝试一下,如果您需要更多帮助,请告诉我。