之前我在视图页面中创建了一个导航栏,我在相应的控制器中编写了该功能,但现在我必须把它放在主文件(布局)中。但现在我不知道在哪里写这个功能。 我还必须通过包含导航栏值的函数将两个变量传递给布局文件。 我已经尝试了一些方法,但它允许我只返回值。 基本上我想知道我在哪里可以编写以下函数在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
]);
}
答案 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 文件中。尝试一下,如果您需要更多帮助,请告诉我。