Модули и меню в backend

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Модули и меню в backend

Сообщение andipas »

Задача - чтобы админское меню формировалось исходя из установленных модулей. Установил basic

Все модули наследуются от ParentModule в котором есть метод:

Код: Выделить всё

    public static function getAdminMenu(){
        $label = Yii::t('admin', self::getInitParamValue(self::KEY_MODULE_ADMIN_TITLE));
        if($label){
            return '<li><a href="'.Url::toRoute(self::getInitParamValue(self::KEY_MODULE_ADMIN_ROUTE)).'">'.$label.'</a></li>';
        }
        return '';
    }
в админском шаблоне:

Код: Выделить всё

                    foreach(Yii::$app->modules as $moduleName => $moduleParam) {
                        echo Yii::$app->getModule($moduleName)->getAdminMenu();
                    }
Но почему то yii ругается что метода getAdminMenu у модулей нет, даже если этот метод добавляю в класс модуля. Что я делаю не так?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Модули и меню в backend

Сообщение vova07 »

У вас метод статический, нужно или правильно его вызывать, или поправить этот момент.
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули и меню в backend

Сообщение andipas »

Пробовал и статичный и обычный, та же ошибка.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Модули и меню в backend

Сообщение lynicidn »

кешируете пхп код?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули и меню в backend

Сообщение zelenin »

код ошибки покажите.
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули и меню в backend

Сообщение andipas »

Всем спасибо, разобрался.

В модулях был debuggii который не наследовался, собственно из за этого была проблема.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Модули и меню в backend

Сообщение maleks »

переделал с проверкой instanceof ?
Yii2 universal module sceleton - for basic and advanced templates
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули и меню в backend

Сообщение andipas »

maleks писал(а):переделал с проверкой instanceof ?
Сделал проще, в родительском классе для всех модулей сделал переменную:

public $adminRoute;

В каждом модуле где нужно меню соответственно ее устанавливаю, в админском шаблоне меню формируется пока так:

Код: Выделить всё

                    foreach(Yii::$app->modules as $moduleID => $moduleParam) {
                        $module = Yii::$app->getModule($moduleID);
                        if(isset($module->adminRoute)){
                            echo Html::tag('li', Html::a(Yii::t('admin', $module->id . '_menu_title'), [$module->adminRoute]));
                        }
                    }
 
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Модули и меню в backend

Сообщение maleks »

некрасивое решение. Для таких вещей существуют интерфейсы и instanceof

Плюс ваш код не учитывает что одни модули могут быть вложены в другие.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Модули и меню в backend

Сообщение maleks »

У вас вообще подход немного страдает.
Ваш код по сути создаст экземпляры всех модулей, и нужных и ненужных, того же gii, а оно надо?
По идеологии yii экземпляр модуля создается когда он запрошен.
Yii2 universal module sceleton - for basic and advanced templates
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули и меню в backend

Сообщение andipas »

maleks писал(а):У вас вообще подход немного страдает.
Ваш код по сути создаст экземпляры всех модулей, и нужных и ненужных, того же gii, а оно надо?
По идеологии yii экземпляр модуля создается когда он запрошен.
Согласен. Меня тоже смущает вызов всех модулей. Была мысль брать конфиг модулей и из него строить меню, только как его правильно взять?
Предложите более грамотное решение задачи.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули и меню в backend

Сообщение zelenin »

andipas писал(а):
maleks писал(а):У вас вообще подход немного страдает.
Ваш код по сути создаст экземпляры всех модулей, и нужных и ненужных, того же gii, а оно надо?
По идеологии yii экземпляр модуля создается когда он запрошен.
Согласен. Меня тоже смущает вызов всех модулей. Была мысль брать конфиг модулей и из него строить меню, только как его правильно взять?
Предложите более грамотное решение задачи.
Yii::$app->modules
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули и меню в backend

Сообщение andipas »

Точно, теперь меню формирую так:

Код: Выделить всё

                    foreach(Yii::$app->modules as $moduleID => $moduleParam) {
                        if(is_array($moduleParam) && isset($moduleParam['adminRoute'])){
                            echo Html::tag('li', Html::a(Yii::t('admin', $moduleID . '_menu_title'), [$moduleParam['adminRoute']]));
                        } else if ($moduleParam instanceof \app\components\AModule){
                            echo Html::tag('li', Html::a(Yii::t('admin', $moduleID . '_menu_title'), [$moduleParam->adminRoute]));
                        }
                    }
 
Ответить