Сервисы
Сущность фреймворка, по умолчанию по структуре и потребляемым ресурсам, легче страницы и контроллера.
- Сервис предназначен для выполнения синхронных фоновых задач. Всё тоже самое можно конечно же реализовать в контроллере и странице.
- не требует подключения к БД и не имеет записи в БД
- минимально состоит из 1 файла
- не имеет какой бы то либо структуры по сравнению с контроллером
- формат взаимодействия с сервисом, разработчик выбирает сам.
Примеры использования сервиса
- Динамически генерировать sitemap.xml, например если не используется cron-скрипт для генерации статичного файла.
- сервис может выдавать картинку для CAPTCHA
- Сервис может выполнять фоновые операции от страницы, взаимодействовать по AJAX.
- Экспортировать RSS.
- Импортировать данные из чего угодно.
Сервисы предназначены для выполнения вспомогательных задач: выполнение фоновых задач, выполнение AJAX-команд, экспорт/импорт. У сервиса нет фиксированной структуры, что даёт свободу разработчику. Сервисы не имеют записи в БД.
Пример
<?
$ext_id = get_int('id');
$ext_action = get_str('action');
$response = [];
// Название действия.
$response['action'] = $ext_action;
// Признак ошибки.
$response['error'] = false;
// Сообщение.
$response['message'] = '';
// HTML данные.
$response['html'] = '';
// Любые данные, которые могут быть обработаны в JavaScript.
$response['records'] = [];
$response['date'] = date('m.d.Y');
$response['any_key'] = 'Любое значение.';
switch( $ext_action ){
case 'save':
...
if( $ext_id == 0 ){
$response['error'] = true;
$response['message'] = 'Ошибка. Вы не указали код записи.';
}
...
break;
case 'new':
...
break;
case 'remove':
...
break;
case 'view':
...
$response['html'] = app::$tpl->fetch('news/view.tpl');
$sql = 'SELECT * FROM comments';
$records = app::$db->selrow();
if( is_array( $records ) == true ){
$response['records'] = $records;
}
...
break;
default:
...
$response['html'] = app::$tpl->fetch('news/list.tpl');
...
break;
}
echo json( $response );
?>