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

How and where to write function to use in layout(main.php) in yii2 basic

之前我在视图页面中制作了一个导航栏,为此我在相应的控制器中编写了函数,但现在我必须将其放在主文件(布局)中。但是现在我不知道在哪里写函数。 我还必须通过包含导航栏值的函数将两个变量传递给布局文件。 我已经尝试过一些方法,但它只允许我 return 值。 基本上我想知道我可以在哪里编写下面的函数以在 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
        ]);
}

您可以使用 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文件中。试试吧,如果您需要更多帮助,请告诉我。