Собственно, что же в нем интересного?
Основной задачей дополнения Backvendor является максимальная автоматизация начальной стадии проекта и освобождение разработчика от рутины при создании веб-сервиса. С помощью Backvendor и пары команд в консоли можно создать каркас для приложения, содержащее веб-сервис и админпанель; быстро настроить CRUD для каждой модели, указать связи между ними. Все это делается гораздо быстрей, чем при использовании стандартных средств Yii. Детальную информацию по этому поводу можно посмотреть на самом сайте Yii framework. Для себя лично я выделил ряд особенностей Backvendor, которые на мой взгляд будут полезны всем.
Возможности Backvendor
1) Ускорение процесса разработки. Достаточно прописать одну консольную команду, чтобы создать скелет будущего приложения.
2) Дополнение полностью объектно-ориентированное.
3) Кодирование CRUD для back-end сводится к генерации моделей active record и описыванию параметров в конфиге.
4) Валидация форм.
5) Автоматическое создание веб-сервиса поддерживающее JSON API.
6) Функция автодокументирования кода.
7) Поддержка API версионирования.
8) Возможность создания функциональных тестов для разработки приложения в стиле TDD, что позволяет еще больше укоротить цикл.
9) Развертывание кода на сервере используя Phing
Создание веб-сервиса
Теперь давайте рассмотрим, как же все это работает. Ниже привожу с комментариями создание базового веб-сервиса с админкой и фрагменты кода.
ВНИМАНИЕ: данное приложение будет создано исключительно в демонстрационных целях и никакой логики не несет! Все желающие могут скачать код демо-приложения здесь.
Шаг 1.
Скачиваем само раcширение Backvendor и кладем его в папку с веб доступом (я не менял ее название с Backvendor). После этого в командной строке пишем:
cd /path/to/webroot/Backvendor
php bviic.php createmultiapp --path=»/path/to/webroot/my-demo-project»
Легким движением руки мы получаем новый проект, который находится в папке my-demo-project. Он уже содержит структуру приложения, базовые классы и требует от вас только необходимых настроек. Проект состоит из таких частей:
1. applications — тут лежат 2 приложения — админпанель и веб-сервис а также папка images для хранения общих картинок;
2. core — общий код для всех приложений;
3. framework — собственно сам Yii Framework.
Шаг 2.
Перед началом работы нужно применить миграции к вашей базе данных (естественно БД нужно создать заранее и настроить доступ к ней в core/config/db.php). Это делается в консоли:
cd /var/www/my-demo-project/applications/backend/protected php yiic migrate
Шаг 3.
Займёмся настройкой админпанели (моделями и расстановкой связей между ними).
В новом проекте вам нужно будет генерировать модели для необходимых таблиц при помощи Gii Tool. Его настройки находятся в файле /core/config/main.php. При генерации моделей выставляем путь для них «core.models»
Основные настройки для CRUD и моделей находятся в файле backend/protected/controllers/SiteController.php в функции reconfigureEntityParamsDictionary. Для данного демо-проекта эта функция выглядит так:
self::$entityConfigDictionary = CMap::mergeArray(
parent::$entityConfigDictionary, array(
'user' => array(
'modelName' => 'User',
'excludeFromGridView' => array(
'password', 'salt',
),
'excludeFromDetailView' => array(
'password', 'salt',
),
'modelAlias' => 'Blog User',
'modelAliasPlural' => 'Blog Users',
'bool' => array('admin'),
'datetime' => array('creation_date'),
'images' => array('image'),
'title' => 'username',
'link' => array(
'fb_link' => 'http://www.facebook.com/profile.php?id={value}'
),
'password' => array('password'),
'dropDown' => array(
'role' => array(
1 => 'Publisher',
2 => 'Moderator',
3 => 'Writer',
),
),
'maxUploadedImageSize' =>
array('width' => 200, 'height' => 200),
'selectable' => 2,
'nuke'=>true
),
'post' => array(
'modelName' => 'Post',
'notUseTitleOfRelation' => array('author'),
),
'postCategory' => array(
'modelName' => 'PostCategory',
'linksManyToManyRelation' => array('post', 'category')
),
'category' => array(
'modelName' => 'Category',
'modelAliasPlural' => 'Categories',
),
));
}
Вот и Все.
Каждый ключ в этом массиве (User, Post и т. д.) - название сущности. Описание настроек есть в документации по расширению — http://mobidev.biz/Backvendor_create_backend.html
Правильно сконфигурировав сущности вам не придётся создавать вручную CRUD для них, также не придётся и редактировать модели. Всю работу на себя берет массив с настройками.
Что касается веб-сервиса — как вы наверное догадались он лежит в папке apllication/webservice. Основная логика находится в ApiController.php, здесь вы указываете Api методы, которые будут вызываться клиентом.
В качестве формата общения между сервером и клиентом используется JSON.
Backvendor предполагает использование следующей архитектуры для веб-сервиса:
1) каждый запрос валидируется отдельной моделью в которой прописываются правила валидации для каждого параметра в запросе;
2) вся логика находится в соответствующих компонентах, контроллер отвечает только за выдачу ответа клиенту.
На мой взгляд, очень хорошее и продуманное архитектурное решение. Также вы можете сделать версионирование вашего API, как это сделать также написано в документации.
Выводы:
Довольно простое в обращении и работе дополнение, которое, как мне кажется, займёт достойное место среди инструментария разработчиков. Работает шустро, как видно выше из пошагового описания — требует минимум времени и дает хорошие результаты. Порывшись на сайте, привожу, на мой взгляд, самые полезные ссылки, на что стоит обратить внимание. Дерзайте!
Куча ссылок:
1) Детальная информация о проекте доступна тут http://mobidev.biz/Backvendor.html
2) Проектная документация (доступна только на английском):
Полный перечень документов http://mobidev.biz/Backvendor_overview
Как и что лучше располагать в проекте http://mobidev.biz/Backvendor_recommended_architecture.html
Документация по API http://mobidev.biz/Backvendor_create_webservice_api.html Развертывание кода http://mobidev.biz/Backvendor_using_phing_build.html
3) Что и где скачать
Backvendor доступен для скачивания на github (https://github.com/mobidevpublisher/Backvendor) Демо версия проекта https://github.com/mobidevpublisher/Backvendor-demo