24 июня 2014 г., 13:48:33 Yii backend yii 12 Комментариев
Много раз мне в сети попадаются такие вопросы, как разделить frontend часть от backend. С frontend вроде и так всё понятно, но как только вопрос доходит до создание backend, люди сразу начинают прислушиваться к тысячам советов о том, как же лучше всего разделить.
Существует не мало вариантов разделения, а так же не мало вариантов реализации backend'а. Самый популярный вариант, это создание backend модулем, и, по-моему мнению, самый лучший вариант. Почему - расскажу далее.
И так, выделим способы реализации backend'a:
Первый вариант будет самым толстым. Такой способ подходит для больших приложений, где весь проект тяжело разместить в одном месте. Это хороший вариант, но чаще всего он не нужен, поэтому в этой статье мы его рассматривать не будем, т.к. статья получится очень большой. Этот вариант заслуживает отдельной статьи и для 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();
Вот, собственно, и вся магия. :)
Комментарии [12]
Новый комментарий