Модульная система и yii2-user
Модульная система и yii2-user
Вопрос по модульной системе.
Имеем yii2-app-advanced и необходимость установить yii2-user
Если использовать composer - то папка установится в vendor и будет обновляться при composer update. В связи с этим, менять прям в нем не очень хочется.
Мне бы хотелось разделить по приложению.
Какие шаги правильные? Создать модуль User в Common extends dektrium\user\Module, так же extends все контроллеры из vendor в frontend. В frontend так же сделать модуль, наследованные от common\moduled\user и перенести туда view из vendor (ну и так же сделать в backend, все, что касается админа)?
Ну или вообще забить на обновления composerom и не ставить в composer.json yii2-user
Имеем yii2-app-advanced и необходимость установить yii2-user
Если использовать composer - то папка установится в vendor и будет обновляться при composer update. В связи с этим, менять прям в нем не очень хочется.
Мне бы хотелось разделить по приложению.
Какие шаги правильные? Создать модуль User в Common extends dektrium\user\Module, так же extends все контроллеры из vendor в frontend. В frontend так же сделать модуль, наследованные от common\moduled\user и перенести туда view из vendor (ну и так же сделать в backend, все, что касается админа)?
Ну или вообще забить на обновления composerom и не ставить в composer.json yii2-user
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
Как разработчик Yii2-user предлагаю вам ставить модуль через composer. Я старался сделать модуль максимально легким для расширения, поэтому, если вы хотите изменить поведение модуля сделать это не слишком сложно. Контроллеры можно переопределять через controllerMap модуля, вьюхи переопределяются через темы, а модели - через специальный компонент ModelManager.
Что касается разделения на фронтенд и бекенд, то я этим вопросом не занимался. Я могу предложить такой вариант: создать во фронтенде и бекенде модули, отнаследованные от dektrium\user\Module и через controllerMap определить доступные контроллеры. Не знаю, насколько работоспособен такой вариант, но попробовать можно.
Что касается разделения на фронтенд и бекенд, то я этим вопросом не занимался. Я могу предложить такой вариант: создать во фронтенде и бекенде модули, отнаследованные от dektrium\user\Module и через controllerMap определить доступные контроллеры. Не знаю, насколько работоспособен такой вариант, но попробовать можно.
Re: Модульная система и yii2-user
Спасибо за модуль и за ответ. По поводу разделения - если для каждого из ендов определять через controllerMap свои контроллеры (например, для frontend только AdminController), то его надо "отключить" для всего остального. А для этого надо будет все-таки "залезть" в vendor и при обновлении это слетит. Или я путаю уже?
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
Путаете. Для каждого модуля будут доступны только те контроллеры, которые вы определили в controllerMap.
P.S. Постараюсь на днях написать гайд о разделении на фронтенд и бекенд.
P.S. Постараюсь на днях написать гайд о разделении на фронтенд и бекенд.
Re: Модульная система и yii2-user
Огромное спасибо. И будет интересно, да, почитать гайд
Re: Модульная система и yii2-user
Не появилось "правильного" гайда пока?
Re: Модульная система и yii2-user
Я создавал тему как раз на этот злободневный вопрос расширяемости модулей.
Вот на примере данного yii2-user модуля, что можно увидеть:
переопределять существующие,добавлять новые, но не убирать доступные.
У AdminController там явно задана логика доступа по именам пользователей. Не гуд.
Вообще в yii2 создание таких штук как контроллер проходит через DI контейнер, для которого собственно можно через конфиг настроить нужное поведение, в том числе и фильтра.
Вот на примере данного yii2-user модуля, что можно увидеть:
dmeroff писал(а):Контроллеры можно переопределять через controllerMap модуля
переопределять существующие,добавлять новые, но не убирать доступные.
В yii2 появился DI, как раз для таких целейdmeroff писал(а):а модели - через специальный компонент ModelManager.
У AdminController там явно задана логика доступа по именам пользователей. Не гуд.
Вообще в yii2 создание таких штук как контроллер проходит через DI контейнер, для которого собственно можно через конфиг настроить нужное поведение, в том числе и фильтра.
Yii2 universal module sceleton - for basic and advanced templates
Re: Модульная система и yii2-user
Да, надо бы как-нибудь въехать в DI, наверное.
А с этим модулем как-то не гладко получается разделить его
А с этим модулем как-то не гладко получается разделить его
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
@maleks убрать существующие контроллеры через контроллерМэп можно, для этого необходимо созлать наследника класса модуля и объявить контроллерМэп в нем.
@begin Немного я затянул с ответом, но все же. Подключить Yii2-user к advanced template оказалось не слишком сложно: достаточно созлать два файла и поправить конфиг.
Шаг 1. Установите Yii2-user как указано в документации
Шаг 2. Создайте файл backend\modules\user\Module и добавьте туда следующий код:
Шаг 3. Добавьте модуль в конфиг бекенда
Шаг 4. Создайте файл frontend\modules\user\Module и добавьте туда следующий код:
Шаг 5. Добавьте модуль в конфиг фронтенда
После этих нехитрых манипуляций, бекенду доступны только контроллер админки и авторизации, а фронтенду все остальные. Особо сильно я этот вариант работы не тестировал, но по-моему, никаких проблем быть не должно.
@begin Немного я затянул с ответом, но все же. Подключить Yii2-user к advanced template оказалось не слишком сложно: достаточно созлать два файла и поправить конфиг.
Шаг 1. Установите Yii2-user как указано в документации
Шаг 2. Создайте файл backend\modules\user\Module и добавьте туда следующий код:
Код: Выделить всё
<?php
namespace backend\modules\user;
class Module extends \dektrium\user\Module
{
public $controllerMap = [
'admin' => 'dektrium\user\controllers\AdminController',
'security' => 'dektrium\user\controllers\SecurityController',
];
}
Код: Выделить всё
'user' => [
'class' => 'backend\modules\user\Module',
'viewPath' => '@dektrium/user/views',
'admins' => ['admin_username'],
],
Код: Выделить всё
<?php
namespace frontend\modules\user;
class Module extends \dektrium\user\Module
{
public $controllerMap = [
'registration' => 'dektrium\user\controllers\RegistrationController',
'security' => 'dektrium\user\controllers\SecurityController',
'recovery' => 'dektrium\user\controllers\RecoveryController',
'settings' => 'dektrium\user\controllers\SettingsController',
'profile' => 'dektrium\user\controllers\ProfileController',
];
}
Код: Выделить всё
'user' => [
'class' => 'frontend\modules\user\Module',
'viewPath' => '@dektrium/user/views',
],
Re: Модульная система и yii2-user
Тут же полезу тестировать, спасибо
Re: Модульная система и yii2-user
В конфигах бекенда/фротнэнда не надо менять Identity? Остается для стандартного модуля Yii?
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
Должно автоматически подхватиться, но на всякий случай удалите из конфига настройку компонента user.
Re: Модульная система и yii2-user
А может не отрабатываться массив 'admins' => ['begin'], ?
Почему то могу зайти под любым логином
Почему то могу зайти под любым логином
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
Очень странно. У себя такого поведения не наблюдаю. Под словом "зайти" вы имеете в виду именно доступ к админке? Или авторизацию в бекенде?
Re: Модульная система и yii2-user
Авторизация в бекенде. Ну и, естественно, доступ ко всем контроллерам. Снесу все, переставлю, попробую еще сейчас
Re: Модульная система и yii2-user
При создании контроллера сначала просматривается карта контроллеров если есть соответствие а если нет в карте то ищутся контроллеры в файлах.dmeroff писал(а):@maleks убрать существующие контроллеры через контроллерМэп можно, для этого необходимо созлать наследника класса модуля и объявить контроллерМэп в нем.
Yii2 universal module sceleton - for basic and advanced templates
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Модульная система и yii2-user
Если нет в карте, то ищутся в неймспейсе имямодуля\controllers. У наследника модуля нет контроллеров в этом неймспейсе, соответственно доступа к остальным контроллерам не будет.
Re: Модульная система и yii2-user
а точно, вы правы, в такой комбинации окей.
Yii2 universal module sceleton - for basic and advanced templates