/** * Use case: * \dmstr\helpers\Html::a("test link", ['create']) * * @param string $text * @param null $url * @param array $options * @return string|null */ public static function a($text, $url = null, $options = []) { return RouteAccess::can($url, function () use($text, $url, $options) { return parent::a($text, $url, $options); }, function () { return null; }, [$text, $options]); }
<!-- /.search form --> <?php // prepare menu items, get all modules $menuItems = []; $favouriteMenuItems[] = ['label' => 'MAIN NAVIGATION', 'options' => ['class' => 'header']]; $developerMenuItems = []; foreach (\dmstr\helpers\Metadata::getModules() as $name => $module) { $role = $name; $defaultItem = ['icon' => 'fa fa-cube', 'label' => $name, 'url' => ['/' . $name], 'visible' => Yii::$app->user->can($role) || Yii::$app->user->identity && Yii::$app->user->identity->isAdmin, 'items' => []]; // check for module configuration and assign to favourites $moduleConfigItem = is_object($module) ? isset($module->params['menuItems']) ? $module->params['menuItems'] : [] : (isset($module['params']['menuItems']) ? $module['params']['menuItems'] : []); switch (true) { case !empty($moduleConfigItem): $moduleConfigItem = array_merge($defaultItem, $moduleConfigItem); $moduleConfigItem['visible'] = \dmstr\helpers\RouteAccess::can($moduleConfigItem['url']); $favouriteMenuItems[] = $moduleConfigItem; continue 2; break; default: $defaultItem['icon'] = 'fa fa-circle-o'; $developerMenuItems[] = $defaultItem; break; } } // create developer menu, when user is admin if (Yii::$app->user->identity && Yii::$app->user->identity->isAdmin) { $menuItems[] = ['url' => '#', 'icon' => 'fa fa-cube', 'label' => 'Modules', 'items' => $developerMenuItems, 'options' => ['class' => 'treeview'], 'visible' => Yii::$app->user->identity->isAdmin]; } echo dmstr\widgets\Menu::widget(['options' => ['class' => 'sidebar-menu'], 'items' => \yii\helpers\ArrayHelper::merge($favouriteMenuItems, $menuItems)]);