Помогите с проектированием структуры приложения на Yii

Привет сообществу Yii.

мне требуется разработать приложение на Yii, но никак немогу опредилится с структурой.

Что нужно:

Backend (админ. часть)

Frontend (пользовательская часть)

Ajax запросы.

С Frontend’ом все понятно, управляющим контролером будет protected/controllers/SiteController.php.

Как быть с Админ частью и Ajax запросами?

Ты можешь создать контроллер AdminController.php для админки :) Не вижу проблемы, я вообще по отдельному контролеру на таблицу использую (когда надо операции создания, удаления, изменения). В общем контролеров у тебя может быть много.

А что с AJAX тебе непонятно? Ты можешь запрашивать аяксом любой урл…

Непонятно, какой адрес использовать.

например мне нужно получить какието JSON данные index.php?r=site/getjson, получается что мне нужно в контролере SiteController.php написать функцию getjson?

Именно так, эта функция называется "действие" и должна называться actionGetJson

Как то гладко все получается, заюзай сколько хочешь контролеров, настройки лупи для всех одни те же, компонетный сами подтянутся. Осталось получать от этого только профит.

на самом деле ума не приложу как такое сделать

А если по существу, вопросы еще есть?

Стоит ли разделять Backend и Frontend в плане того что б создать отдельные файлы запуска index.php и admincp.php?

Нет, не вижу никакого смысла в этом.

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

Допустим, Я вижу в этом здравый смысл, все таки админка использует много чего своего, например, свою тему, которая не связана Frontend’ом.

Поэтому я в корне создал директорию admin и туда положил config/admin.cfg.php (конфигурация, для админа) и index.php




define('MAINDIR', dirname(__FILE__));


$yii = MAINDIR.'/../framework/yii.php';

$config = MAINDIR.'/config/admin.cfg.php';


defined('YII_DEBUG') or define('YII_DEBUG',true);


defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);


require_once($yii);

Yii::createWebApplication($config)->run();



Вопрос в следующем, как сделать единую авторизацию для Backend и Frontend ? Для Backendа она принудительная и только администраторы могут входить, а для Frontend она по желаю пользователя.

Другое офрмление можно было бы обеспечить и задав для контролеров (относящихся к админке) $this->layout=’//layouts/admin’ (вместо //layouts/main)

А как сделать сквозную авторизацию, затрудняюсь ответить. Авторизацией занимается классы WebUser и UserIdentity. Их и нужно изучать.

Но если ты совсем хочешь разнести админку и юзерку в разные папки, то где ты думаешь хранить общие для них модели?

А что мне будет мешать использовать одну папку protected/* для Backend и Frontend ?

Делай как кажется более правильным. Мне по видимому все равно не понять.

да я и сам еще много чего не понимаю, готовых примеров мало, вот что нашел по этому поводу

http://habrahabr.ru/blogs/yii/117457/

http://www.yiiframework.com/wiki/63/organize-directories-for-applications-with-front-end-and-back-end-using-webapplicationend-behavior/

А общие фразы типа, добавь сюда, добавь туда только отвлекают. Куда не двинешься - тут же ошибку получаешь.

Уважаемый Unsiker! Вдумчивое прочтение мануалов (возможно не однократное) гарантировано снимет массу вопросов. Проверено на себе. Абсолютно точно с этого надо начинать.

Гайд + API - держать "под рукой", постоянно заглядывать.

Не помешает разобрать (не просто просмотреть, а повторить, самостоятельно сделать по описанию) пару-тройку демо-приложений (не только из официальных, в том числе и демо-блог, но и распространяемых… сейчас, благо таких достаточно)

Один из простых вариантов организации админки (на мой взгляд) - модулем.

modules/admin - создать при помощи gii модуль админ

Все контроллеры админки наследовать от, например, AdminController (в нём задать accessControl, при необходимости переопределять его в дочерних контроллерах)

Редактирование моделей (например, категорий) - admin/categories - генерировать CRUD при помощи gii (не забыть указать admin/ - тогда генератор разместит код в соответствующий модуль)

Вот здесь можно купить :