Ми}{@лbI4

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

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

24.06.2014 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();

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