Yii - Организация директорий для приложений, использующий front-end и back-end архитектуру

16.08.2011

Структура приложения

Организация директорий для приложений, использующий front-end и back-end архитектуру

перевод статьи - http://www.yiiframework.com/wiki/33/organize-directories-for-applications-with-front-end-and-back-end
Большие веб-приложения часто разделены на 2 части: front-end и back-end(иногда и более), зависящих от прав пользователей. Front-end - вид сайта, для обычных пользователей, а back-end - вид сайта для администраторов. Разница между ними - во внешнем виде. В этом руководстве мы опишем как организовать эти части в проекте.

Замечание: Ниже мы покажем лишь пример организации директорий, хотя для Вашего конкретного случая вы можете организовать директории, так как Вам будет удобнее.

Для начала добавим файлы и директории, как показано ниже:

Структура приложения

Мы имеем 2 входных скрипта: index.php и backend.php. Первый отвечает за front-end, второй за back-end. Весь код приложения расположен в базовой директории приложения - protected, которая должна быть защищена от доступа конечных пользователей.

В папке protected у нас расположен стандартный набор директорий, необходимых для типичного yii приложения: config, components, controllers, models, views и runtime.

Дополнительная директория backend используется для хранения кода специально для back-end части. Как и в front-end, в back-end находятся аналогичные директории: config, components, controllers, models, views и runtime.

Входной скрипт для front-end и back-end содержит одинаковый код, за исключением использования различной конфигурации приложения:

 

// index.php:
require('path/to/yii.php');
Yii::app()->createWebApplication('protected/config/main.php')->run();
 
// backend.php:
require('path/to/yii.php');
Yii::app()->createWebApplication('protected/backend/config/main.php')->run();

 

Конфигурация для front-end части стандартная, как в одиночных yii-приложениях.
Конфигурация для back-end немного специфичная, как показано ниже:

 

$backend=dirname(dirname(__FILE__));
$frontend=dirname($backend);
Yii::setPathOfAlias('backend', $backend);
 
return array(
    'basePath' => $frontend,
 
    'controllerPath' => $backend.'/controllers',
    'viewPath' => $backend.'/views',
    'runtimePath' => $backend.'/runtime',
 
    'import' => array(
        'backend.models.*',
        'backend.components.*',
        'application.models.*',
        'application.components.*',
    ),
    // ... other configurations ...
);

 

Выше мы, в первую очередь, объявили значения директорий для $backend и $frontend - protected/backend и protected/ соответственно. Затем мы определяем корневой алиас $backend, расположенный в каталоге protected/backend. В конфигурационном массиве объявляем что базовая директория приложения back-end будет такой же как и для front-end, а именно protected/. Остальные важные пути (controllerPath, viewPath и runtimePath) определяются относительно директории protected/backend. И в конце мы импортируем некоторые директории, начиная от директорий back-end’а components и вложенные директории, и заканчивая директориями front-end’а components.

Итак, почему же мы используем директорию protected, как базовую директорию приложения для обоих частей(для front-end и back-end)? Так сделано потому, что обычно в back-end необходимо повторно использовать код предназначенный для front-end’а, но не наоборот. Использование одной базовой директории приложения, для обоих частей, означает также использование одного и того же корневого псевдонима пути - application. Поэтому код использующий псевдоним application может быть повторно использован без всяких проблем в обоих частях.

Back-end, в дополнение к повторному использованию кода front-end’a, имеет свой собственный код, к примеру код административной части. Мы храним этот код в директории protected/backend/ и поддерикториях. В своей конфигурации приложения, мы также импортируем эти поддиректории.

blog comments powered by Disqus
Наверх