Как организовать backend?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Как организовать backend?

Сообщение chesar »

Здравствуйте. Изучаю Yii неспешно, и вот уж он мне по душе пришелся, что не хочется вникать в вордпресы, битриксы etc. Задумался над реализацией "болванки", что бы сократить время решения типовых задач. До этого приличное время уходило только на пользователей, на зачем писать по 20 раз то, что уже написано до нас? И собственно что я хочу попытаться реализовать:
Все приложение строится на модулях, по необходимости в модулях подмодули. Управление новостями - модуль, управление пользователями - модуль. Таким образом мне кажется будет легче расширять / ужимать функционал. Но вот как быть с админкой? До этого делал её в виде модуля, все контроллеры наследовались от админского (Для RBAC), а для отображения была отдельная тема, больше ничего и не было. Все модели в общей папке.
А сейчас как? Так же модулем? Но как тогда подгружать модели из других модулей?
Надеюсь понятно объяснил, простите за косноязычие если что )
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Как организовать backend?

Сообщение yiijeka »

Я админку предпочитаю делать отдельным приложением. YiiBoiilerplate (https://github.com/clevertech/YiiBoilerplate) или yiinitializr (http://yiinitializr.2amigos.us/) смотрели?
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Как организовать backend?

Сообщение sluchainiyznak »

Здравствуйте, есть замечательная статья по методам разделения - http://janaka.ru/blog/2013/05/yii-backe ... anization/
Zadira
Сообщения: 48
Зарегистрирован: 2011.11.11, 18:20
Откуда: Москва
Контактная информация:

Re: Как организовать backend?

Сообщение Zadira »

Готовые модули не использую, все самописные, и в своей болванке для простеньких сайтов я для себя установил некие соглашения для модулей.
Каждый модуль у меня содержит два базовых контроллера, DefaultController и AdminController.
Так же есть обязательный модуль "admin", в единственном дефолтном контроллере подключаются rbac и добавляются все общие экшены (сортировка, активация/деакативация и т.д.) и от него наследуются все AdminController.
В урлменеджере есть правило которое приводит для всех админских экшенов к адресу ссылки к виду site.ru/admin/(module_name)/(action)
SergV
Сообщения: 192
Зарегистрирован: 2012.07.08, 11:27

Re: Как организовать backend?

Сообщение SergV »

chesar, посмотри в сторону yupe, как там реализована админка. Не знаю имеет ли Zadira отношение к yupe, но описанное им вроде похоже на то как в yupe сделано. Сам я лишь поверхностно смотрел эту сборку, но работая над проектом потихоньку прихожу к тому же, отдельный модуль - "администратор", и в других модулях контролер админа, в общем так же как и Zadira описал. На мой взгляд такой подход удобный при масштабировании, если всё правильно сделать, тогда при добавлении нового модуля он автоматом будет подключаться в фронту и админке.
По крайней мере на мой взгляд, это лучше чем городить огород отдельным приложением, как предложили yiijeka и sluchainiyznak, но это как грится большое и жирное !ИМХО!, у каждого свои взгляды на это, и может их вариант правильней...
Zadira
Сообщения: 48
Зарегистрирован: 2011.11.11, 18:20
Откуда: Москва
Контактная информация:

Re: Как организовать backend?

Сообщение Zadira »

SergV, к yupe отношения не имею, я смотрел на нее, но она слишком тяжела для восприятия с первого раза, на мой взгляд. К своему варианту я пришел сам. В основном постоянно идут простые сайты, чуть сложнее сайта визитки или простеньких магазинов, и такая структура очень подходит им. А вот уже для более серьезных вещей я использую структуру YiiBoiilerplate и Yiinitializr.
В новом проекте (CRM с интеграцией АТС Oktell Call-Center) сейчас как раз применяю Yiinitializr Advanced, так как в проекте и бэкенд для менеджеров, фронт для клиентов отслеживающих ситуацию по своему проекту и API для связи с Oktell.
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Как организовать backend?

Сообщение chesar »

yiijeka писал(а):Я админку предпочитаю делать отдельным приложением. YiiBoiilerplate (https://github.com/clevertech/YiiBoilerplate) или yiinitializr (http://yiinitializr.2amigos.us/) смотрели?
Думаю не самый лучший вариант, т.к. количество моделей увеличивается, соответственно и времени на поддержку. Все-таки хочется попробовать что-то более гибкое.
sluchainiyznak писал(а):Здравствуйте, есть замечательная статья по методам разделения - http://janaka.ru/blog/2013/05/yii-backe ... anization/
Да читал, все небольшое множество что нагуглилось прочитал, и сейчас даже еще больше каша в голове )
Zadira писал(а):Каждый модуль у меня содержит два базовых контроллера, DefaultController и AdminController.
Так же есть обязательный модуль "admin", в единственном дефолтном контроллере подключаются rbac и добавляются все общие экшены (сортировка, активация/деакативация и т.д.) и от него наследуются все AdminController.
В урлменеджере есть правило которое приводит для всех админских экшенов к адресу ссылки к виду site.ru/admin/(module_name)/(action)
Можно чуть поподробнее? Если есть возможность, был бы рад архиву с проектом (логику экшенов можно вырезать), а то так трудно понять как и куда перенаправляет и где какой код.
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Как организовать backend?

Сообщение sluchainiyznak »

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

Думаю не самый лучший вариант, т.к. количество моделей увеличивается, соответственно и времени на поддержку. Все-таки хочется попробовать что-то более гибкое. 
А в каком именно месте количество моделей увеличивается?
Там модели можно привязать как отдельно к фронт- или бэк-энду, так и общие для всех сделать
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Как организовать backend?

Сообщение yiijeka »

Думаю не самый лучший вариант, т.к. количество моделей увеличивается, соответственно и времени на поддержку. Все-таки хочется попробовать что-то более гибкое.
Моделей остаётся одинаково. Они все помещаются в папку common....Бред короче.
Хочется попробовать более гибкое, пробуйте... Я уже пробовал ;)
Zadira
Сообщения: 48
Зарегистрирован: 2011.11.11, 18:20
Откуда: Москва
Контактная информация:

Re: Как организовать backend?

Сообщение Zadira »

chesar, архив скинуть не могу, и еще дней 8 не смогу, с собой только телефон и iPad.
Каркас приложения очень простой:
- генерируем приложение с помощью консоли "yiic webapp path/to/folder";
- с помощью gii генерируем нужное кол-во болванок модулей, из них один точно должен быть "admin";
- подключаем модули в конфиге;
- в папке модуля "admin" protected/modules/admin/controllers переименовываю DefaultController.php в BackController.php, не забудь в контроллере переименовать класс в "BackController", чтобы получилось

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

class BackController extends Controller
Так же в этом контроллере настраиваем фильтры доступа, я использую RBAC в связке с модулем yii-auth для удобной настройки доступа по ролям, это единственный не самописный модуль;
- в конфиге в секцию "import" добавляем 'application.modules.admin.controllers.BackController';
- в protected/modules/admin/AdminModule.php добавляем

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

public $defaultController = 'back';
- в папке модулей (пример: protected/modules/(module_name)/controllers), создаем контроллер AdminController.php с содержимым:

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

class AdminController extends BackController
{
  public function actionIndex()
  {
    $this->render('index');
  }
}
- в конфиге делаю настройку компонента "urlManager" примерно так:

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

'urlManager' => array(
  'urlFormat' => 'path',
  'showScriptName' => false,
  'rules' => array(
    'login' => 'user/default/login',
    'logout' => 'user/default/logout',
    'admin' => 'admin/back/index',
    'admin/<module:\w+>' => '<module>/admin',
    'admin/<module:\w+>/<action:\w+>/<id:\d+>' => '<module>/admin/<action>',
    'admin/<module:\w+>/<action:\w+>' => '<module>/admin/<action>',
    /**
     * остальные правила, если где то, что то нужно переопределить
     */
    '<controller:\w+>/<id:\d+>' => '<controller>/view',
    '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
  ),
),
- Разбрасываешь экшены по контроллерам, например стандартные "index", "view" в "DefaultController.php", а в "AdminContoller" экшены "admin" (я обычно его переименовываю в "index"), "create", "update" и "delete";

В итоге это стандартное приложение Yii, просто с не большим дополнением.

P.S. Писал по памяти, может быть где то ошибка допущена.
P.P.S. Это просто мучение писать такой пост на iPad
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Как организовать backend?

Сообщение chesar »

Zadira писал(а):P.P.S. Это просто мучение писать такой пост на iPad
Огромнейшее спасибо! В принципе маленько понял, на днях попробую.
SergV
Сообщения: 192
Зарегистрирован: 2012.07.08, 11:27

Re: Как организовать backend?

Сообщение SergV »

В принципе маленько понял, на днях попробую.
Пробовать не надо, 100% работает это решение. :)

Zadira, хдэш ты раньше был дорогой, сток времени потерял изобретая свою админку-велосипед, так как не въехал с налёту как и что работает в yupe, а тут оказывается як два пальца об асфальт. ;) Надо тебе заблогить данный вариант, шоб народ не мучился искать. :)
Zadira
Сообщения: 48
Зарегистрирован: 2011.11.11, 18:20
Откуда: Москва
Контактная информация:

Re: Как организовать backend?

Сообщение Zadira »

SergV, блога не имею, но лучше будет просто на githab'е выложить скелет приложения с описание что и как работает, хотя трудностей не должно возникнуть, если предварительно прочитать прочитать раздел "Основы" и "Управление URL" из полного руководства.
SergV
Сообщения: 192
Зарегистрирован: 2012.07.08, 11:27

Re: Как организовать backend?

Сообщение SergV »

Ну..., если блога нема, то тогда на githab'е тоже можно, главное что бы на виду было.
Что касается прочитать куроводство, то не все нормально читают, да и не все могут понять не с первого, не с 10-го раза что там написано сухим и непонятным языком. Мне лично проще в коде разобраться с подсказкой на том же англицком которого не знаю, чем понять что в русскоязычном куроводстве имеется в виду. То что я сейчас уже знаю за последние три месяца, я изучил по коду и статьям в блогах, но не как не по куроводству, так как там 90% написано слишком сухо, даже обрывки кода не помогают а только больше запутывают, и это при том что это типа для начинающих. :) Ну да лан, это ужо не по теме... :)
Ответить