Модульная система и yii2-user

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Модульная система и yii2-user

Сообщение begin »

Вопрос по модульной системе.
Имеем 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
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

Как разработчик Yii2-user предлагаю вам ставить модуль через composer. Я старался сделать модуль максимально легким для расширения, поэтому, если вы хотите изменить поведение модуля сделать это не слишком сложно. Контроллеры можно переопределять через controllerMap модуля, вьюхи переопределяются через темы, а модели - через специальный компонент ModelManager.

Что касается разделения на фронтенд и бекенд, то я этим вопросом не занимался. Я могу предложить такой вариант: создать во фронтенде и бекенде модули, отнаследованные от dektrium\user\Module и через controllerMap определить доступные контроллеры. Не знаю, насколько работоспособен такой вариант, но попробовать можно.
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Спасибо за модуль и за ответ. По поводу разделения - если для каждого из ендов определять через controllerMap свои контроллеры (например, для frontend только AdminController), то его надо "отключить" для всего остального. А для этого надо будет все-таки "залезть" в vendor и при обновлении это слетит. Или я путаю уже?
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

Путаете. Для каждого модуля будут доступны только те контроллеры, которые вы определили в controllerMap.
P.S. Постараюсь на днях написать гайд о разделении на фронтенд и бекенд.
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Огромное спасибо. И будет интересно, да, почитать гайд
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Не появилось "правильного" гайда пока?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Модульная система и yii2-user

Сообщение maleks »

Я создавал тему как раз на этот злободневный вопрос расширяемости модулей.
Вот на примере данного yii2-user модуля, что можно увидеть:
dmeroff писал(а):Контроллеры можно переопределять через controllerMap модуля

переопределять существующие,добавлять новые, но не убирать доступные.
dmeroff писал(а):а модели - через специальный компонент ModelManager.
В yii2 появился DI, как раз для таких целей

У AdminController там явно задана логика доступа по именам пользователей. Не гуд.
Вообще в yii2 создание таких штук как контроллер проходит через DI контейнер, для которого собственно можно через конфиг настроить нужное поведение, в том числе и фильтра.
Yii2 universal module sceleton - for basic and advanced templates
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Да, надо бы как-нибудь въехать в DI, наверное.
А с этим модулем как-то не гладко получается разделить его
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

@maleks убрать существующие контроллеры через контроллерМэп можно, для этого необходимо созлать наследника класса модуля и объявить контроллерМэп в нем.

@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',
    ];
}

 
Шаг 3. Добавьте модуль в конфиг бекенда

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

'user' => [
    'class'    => 'backend\modules\user\Module',
    'viewPath' => '@dektrium/user/views',
    'admins'   => ['admin_username'],
],
 
Шаг 4. Создайте файл frontend\modules\user\Module и добавьте туда следующий код:

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

<?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',
    ];
}
 
Шаг 5. Добавьте модуль в конфиг фронтенда

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

'user' => [
    'class'    => 'frontend\modules\user\Module',
    'viewPath' => '@dektrium/user/views',
],
 
После этих нехитрых манипуляций, бекенду доступны только контроллер админки и авторизации, а фронтенду все остальные. Особо сильно я этот вариант работы не тестировал, но по-моему, никаких проблем быть не должно.
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Тут же полезу тестировать, спасибо
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

В конфигах бекенда/фротнэнда не надо менять Identity? Остается для стандартного модуля Yii?
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

Должно автоматически подхватиться, но на всякий случай удалите из конфига настройку компонента user.
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

А может не отрабатываться массив 'admins' => ['begin'], ?
Почему то могу зайти под любым логином
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

Очень странно. У себя такого поведения не наблюдаю. Под словом "зайти" вы имеете в виду именно доступ к админке? Или авторизацию в бекенде?
begin
Сообщения: 55
Зарегистрирован: 2013.12.15, 13:26

Re: Модульная система и yii2-user

Сообщение begin »

Авторизация в бекенде. Ну и, естественно, доступ ко всем контроллерам. Снесу все, переставлю, попробую еще сейчас
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Модульная система и yii2-user

Сообщение maleks »

dmeroff писал(а):@maleks убрать существующие контроллеры через контроллерМэп можно, для этого необходимо созлать наследника класса модуля и объявить контроллерМэп в нем.
При создании контроллера сначала просматривается карта контроллеров если есть соответствие а если нет в карте то ищутся контроллеры в файлах.
Yii2 universal module sceleton - for basic and advanced templates
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Модульная система и yii2-user

Сообщение dmeroff »

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

Re: Модульная система и yii2-user

Сообщение maleks »

а точно, вы правы, в такой комбинации окей.
Yii2 universal module sceleton - for basic and advanced templates
Ответить