Блог хеллоуворлдщика

Backend для веб-приложения на Yii


Много раз мне в сети попадаются такие вопросы, как разделить frontend часть от backend. С frontend вроде и так всё понятно, но как только вопрос доходит до создание backend, люди сразу начинают прислушиваться к тысячам советов о том, как же лучше всего разделить.

Существует не мало вариантов разделения, а так же не мало вариантов реализации backend'а. Самый популярный вариант, это создание backend модулем, и, по-моему мнению, самый лучший вариант. Почему - расскажу далее.

И так, выделим способы реализации backend'a:

  1. Как отдельное приложение.
  2. Как единое приложение.
  3. Модулем.

Первый вариант будет самым толстым. Такой способ подходит для больших приложений, где весь проект тяжело разместить в одном месте. Это хороший вариант, но чаще всего он не нужен, поэтому в этой статье мы его рассматривать не будем, т.к. статья получится очень большой. Этот вариант заслуживает отдельной статьи и для Yii второй версии. =)

Второй вариант, ИМХО, индусский (не в обиду индусам). Мне даже его комментировать не хочется. Кому интересно - в поиск, информации море.

Третий вариант мне нравится больше всех для реализации небольших и средних приложений. Главное, понять как он на самом деле реализован, а то некоторые начинают делать что-то типа:

- backend
-- controllers
--- PostController.php
--- CommentsController.php
-- views
-- models

Ну, как то так. Дак вот, это неправильно! Так делать не нужно. Yii нам предоставляет прекрасную возможность использовать правила маршрутизации, и что из этого следует? Верно! Создаём папку backend в controllers модуля и пихаем все контроллеры для управления модулем туда. Далее, при определённом запросе мы должны получать доступ к этим контроллерам. Всё остальное, что относится конкретно к модулю backend пихаем туда, всё что связано с другими модулями - пихаем в них в директорию backend. По-моему всё просто, в итоге ваши модули должны выглядеть вот так:

- blog
-- controllers
--- backend
---- PostController.php
--- PostController.php
-- views
--- backend
---- post
--- post
-- models

Роуты примерно такие:

'backend/<module:\w+>/<controller:\w+>' => '<module>/backend/<controller>/index',
'backend/<module:\w+>/<controller:\w+>/<action:\w+>/*' => '<module>/backend/<controller>/<action>',
'backend/<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/backend/<controller>/<action>',

Дальше уже как фантазия работает. Я сделал ещё раздельные конфигурационные файлы, и в зависимости от запроса в index.php подключается нужный конфиг:

$path = explode('/', $_SERVER['REQUEST_URI']);
switch ($path[1])
{
    case 'backend':
        $config = dirname(__FILE__) . '/../protected/config/backend.php';
        break;
 
    default:
        $config = dirname(__FILE__) . '/../protected/config/frontend.php';
}
 
$yii = dirname(__FILE__) . '/../framework/yii.php';
require_once($yii);
 
Yii::createWebApplication($config)->run();

Вот, собственно, и вся магия. :)

share via vkontakte share via facebook share via mailru share via odnoklassniki share via twitter

Комментарии [10]

[Рамиль] 15 янв. 2015 г., 12:06:40

Спасибо, просто и гениально

Администратор [BUPY7] 15 янв. 2015 г., 14:05:36

Всегда пожалуйста! Рад помочь. =)

[DES1ROER] 09 нояб. 2015 г., 14:13:45

а почему просто не создать отдельный модуль

[Евгений] 11 нояб. 2015 г., 9:11:17

Потому что это неправильно. Во-первых, каждый модуль должен быть самодостаточен, и если есть возможность управление - она должна быть предусмотрена. Админка, как отдельный модуль - это говнокод чистой воды и нарушения всех принципов, которые только возможны. Во-вторых, если это компонентный стиль программирования, то у каждого компонента так же, если предусмотрено, должно быть его управление.В-третьих, людей, которые делают AdminController или AdminModule - сжигать в печи вне очереди.

Администратор [BUPY7] 12 нояб. 2015 г., 19:43:12

Плюсую.

[MAXYC] 26 февр. 2016 г., 14:58:46

А можно посмотреть или взять готовый шаблон yii2-advanced, yii2-starter-kit

Администратор [BUPY7] 26 февр. 2016 г., 16:18:53

Здесь речь ни о Yii2.

[Сергей] 14 марта 2016 г., 23:21:48

А можно поподробнее о нюансах для Yii2? Буду очень благодарен:)

Администратор [BUPY7] 15 марта 2016 г., 10:35:07

Ниже Дмитрий ссылку оставил на свою статью по Yii2. Мне больше нечего добавить. :)

[Дмитрий] 07 марта 2016 г., 2:27:01

Да, тоже поразмышлял над этим в Yii2.