|
3 | 3 |
|
4 | 4 | Исходный код сервиса ["КЛАДР в облаке"] [1]
|
5 | 5 |
|
6 |
| -Структура |
| 6 | +Технологии |
| 7 | +---------- |
| 8 | + |
| 9 | +* [Phalcon] [3] |
| 10 | +* [MongoDB] [4] |
| 11 | +* [Memcached] [5] |
| 12 | + |
| 13 | +Общая структуктура |
7 | 14 | ---------
|
8 | 15 |
|
9 | 16 | * */apps/core* - Модуль сервиса [kladr-api.ru/api.php] [2]
|
|
15 | 22 | * */tests* - Функциональные тесты
|
16 | 23 | * */public*
|
17 | 24 |
|
18 |
| -Технологии |
19 |
| ----------- |
| 25 | +Структура сервиса |
| 26 | +----------------- |
| 27 | + |
| 28 | +* */apps/core/config/* - Файлы конфигурации сервиса |
| 29 | +* */apps/core/controllers/* - Контроллеры |
| 30 | +* */apps/core/models/* - Модели ODM |
| 31 | +* */apps/core/plugins/base/* - Базовые классы плагинов |
| 32 | +* */apps/core/plugins/general/* - Плагины |
| 33 | +* */apps/core/plugins/tools/* - Вспомогательные классы |
| 34 | +* */apps/core/services/* - Сервисы |
| 35 | + |
| 36 | +Архитектура |
| 37 | +----------- |
| 38 | + |
| 39 | +Архитектура сервиса построена на плагинах. Для того чтобы расширить функциональность |
| 40 | +надо всего-лишь реализовать плагин и подключить его в сервисе. |
| 41 | + |
| 42 | +Пример: |
| 43 | +Добавим плагин возвращающий количество объектов в результате. |
| 44 | + |
| 45 | +Добавил плагин CountPlugin.php в /apps/core/plugins/general/ |
| 46 | + |
| 47 | +`````php |
| 48 | +<?php |
| 49 | + |
| 50 | +namespace Kladr\Core\Plugins\General { |
| 51 | + |
| 52 | + use \Phalcon\Http\Request, |
| 53 | + \Phalcon\Mvc\User\Plugin, |
| 54 | + \Kladr\Core\Plugins\Base\IPlugin, |
| 55 | + \Kladr\Core\Plugins\Base\PluginResult; |
| 56 | + |
| 57 | + class CountPlugin extends Plugin implements IPlugin |
| 58 | + { |
| 59 | + public function process(Request $request, PluginResult $prevResult) |
| 60 | + { |
| 61 | + if($prevResult->error){ |
| 62 | + return $prevResult; |
| 63 | + } |
| 64 | + |
| 65 | + $result = $prevResult; |
| 66 | + $result->result = count($result->result); |
| 67 | + return $result; |
| 68 | + } |
| 69 | + } |
| 70 | +} |
| 71 | +````` |
| 72 | + |
| 73 | +Подключим плагин в /apps/core/Module.php |
| 74 | + |
| 75 | +`````php |
| 76 | +// Register CountPlugin |
| 77 | +$di->set('count', function(){ |
| 78 | + return new \Kladr\Core\Plugins\General\CountPlugin(); |
| 79 | +}); |
| 80 | + |
| 81 | +// Setting api |
| 82 | +$di->setShared('api', function() use ($di) { |
| 83 | + $api = new Services\ApiService(); |
| 84 | + $api->addPlugin($di->get('validate')); |
| 85 | + $api->addPlugin($di->get('find')); |
| 86 | + $api->addPlugin($di->get('findParents')); |
| 87 | + $api->addPlugin($di->get('count')); // add CountPlugin |
| 88 | + return $api; |
| 89 | +}); |
| 90 | +````` |
20 | 91 |
|
21 |
| -* [Phalcon] [3] |
22 |
| -* [MongoDB] [4] |
23 |
| -* [Memcached] [5] |
24 | 92 |
|
25 | 93 | Лицензия
|
26 | 94 | --------
|
|
0 commit comments