如何在Yii2中的$ content之前在Main布局页面中传递全局变量

2 yii yii-components yii-extensions yii2

我正在尝试使用"Nav :: widget"在yii2中创建动态菜单.这是我在主布局页面的菜单部分中的代码:

    echo Nav::widget([
            'options' => ['class' => 'navbar-nav navbar-right'],
            'items' => [
                ['label' => 'Home', 'url' => ['/site/index']],
                ['label' => 'About', 'url' => ['/site/about']],
Run Code Online (Sandbox Code Playgroud)

试图获得解决方案:请看看::

1我在app中创建了一个超级控制器"components/Controller.php":

namespace app\components;
use app\models\MenuPanal;

class Controller extends \yii\web\Controller
{

   public $menuItems = [];

public function init(){

     $items = MenuPanal::find()
        ->orderBy('id')
        ->all();

     $menuItems = [];
     foreach ($items as $key => $value) {
                 $this->menuItems[] = ['label' => $value['c_type'] , 'url' => ['#']];
            }

   parent::init();
  }
}
Run Code Online (Sandbox Code Playgroud)

2放置在主布局页面::

   echo Nav::widget([
            'options' => ['class' => 'navbar-nav navbar-right'],

            'items' => Yii::$app->controller->menuItems,

        ]);
Run Code Online (Sandbox Code Playgroud)

帮助非常感谢.

soj*_*oju 6

例如,您可以创建自己的超级控制器并添加menuItems属性:

namespace app\components;

class Controller extends \yii\web\Controller
{
    public $menuItems = [
        ['label' => 'Home', 'url' => ['/site/index']],
        ['label' => 'About', 'url' => ['/site/about']]
    ];
}
Run Code Online (Sandbox Code Playgroud)

你的控制器应该扩展它:

namespace app\controllers;

use app\components\Controller;

class MyController extends Controller {...}
Run Code Online (Sandbox Code Playgroud)

在你的布局中:

echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'items' => Yii::$app->controller->menuItems,
]);
Run Code Online (Sandbox Code Playgroud)

  • 你应该创造它. (2认同)
  • 为Controller添加公共函数init(){}并从DB获取菜单项到公共menuItems,在后端为这些menuitems创建简单的CRUD (2认同)