use Foton\Module\Events;
Класс предназначен для обработки событий (валидация, уведомления, обновления) перед и после операций с данными. Ключевые особенности:
Свойства:
$arr — входные данные;
$eventClass — динамически загружаемый класс событий;
$core — ссылка на ядро системы ($FotonCore);
$noticeKey — ключ для уведомлений.
Основные методы:
1. __construct($arr) — конструктор, инициализирует свойства класса.
2. is() — проверяет существование класса событий для модели и таблицы, загружает его.
3. update($arr, $fields) — обновляет поля согласно настройкам в $arr['update'].
4. valid($arr, $fields) — применяет валидацию к полям (индивидуальную или общую).
5. isValid($arr, $fields) — проверяет поля на соответствие условиям, добавляет уведомления об ошибках.
6. notice($arr, $fields) — проверяет обязательные поля, формирует уведомления.
7. events($arr) — объединяет обработку уведомлений, валидации и обновлений.
8. before() — выполняет предварительную обработку перед операцией (вызывает метод before_* из $eventClass, затем events()).
9. after($arr) — выполняет постобработку после операции (вызывает метод after_* из $eventClass).
10. select($arr) — обрабатывает данные для выборки (вызывает метод select из $eventClass).
Примеры использования
Пример 1. Базовая инициализация и проверка наличия обработчика событий
<?php
// Данные для инициализации
$data = [
'model' => 'User',
'table' => 'Profile',
'operation' => 'create'
];
// Создаём экземпляр класса
$events = new Foton\Module\Events($data);
// Проверяем, существует ли обработчик событий для User/Profile
if ($events->is()) {
echo "Обработчик событий найден и загружен";
} else {
echo "Обработчик событий не найден";
}
Пример 2. Предварительная обработка перед созданием записи (before)
Предположим, есть класс-обработчик \Model\Site\Events\User\Profile:
<?php
namespace Model\Site\Events\User;
class Profile
{
public function before_create($arr)
{
// Добавляем временную метку создания
$arr['create']['created_at'] = date('Y-m-d H:i:s');
return $arr;
}
}
Использование:
<?php
$data = [
'model' => 'User',
'table' => 'Profile',
'operation' => 'create',
'create' => [
'name' => 'Иван Иванов',
'email' => 'ivan@example.com',
'age' => 25
],
'event' => [
'require' => [
'name' => 'error',
'email' => 'error'
],
'valid' => [
'email' => 'email',
'age' => 'integer'
],
'is' => [
'age' => ['min_value', 'warning']
],
'update' => [
'status' => 'active'
]
]
];
$events = new Foton\Module\Events($data);
if ($events->is()) {
$processedData = $events->before();
print_r($processedData);
}
Результат будет содержать:
• обязательные проверки для полей name и email;
• валидацию email и возраста;
• проверку возраста на минимальное значение;
• автоматическое обновление поля status до active;
• добавленную временную метку created_at.
Пример 3. Постобработка после операции (after)
Добавим метод в класс Profile:
<?php
public function after_create($arr)
{
// Логируем создание пользователя
$log = new \Dev\Module\Log;
$log->add("User created: " . $arr['name']);
// Отправляем приветственное письмо
$this->core->mail($arr['from'], $arr['to'], $arr['subject'], $arr['message']);
return $arr;
}
Использование:
<?php
// Предположим, у нас есть результат операции создания
$result = [
'id' => 123,
'name' => 'Иван Иванов',
'email' => 'ivan@example.com'
];
$processedResult = $events->after($result);
Пример 4. Обработка данных для выборки (select)
Добавим метод select в класс Profile:
<?php
public function select($arr)
{
// Добавляем вычисляемое поле
foreach ($arr as &$user) {
$user['age_group'] = $user['age'] >= 18 ? 'adult' : 'minor';
}
return $arr;
}
Использование:
<?php
$users = [
['id' => 1, 'name' => 'Анна', 'age' => 20],
['id' => 2, 'name' => 'Петя', 'age' => 16]
];
$processedUsers = $events->select($users);
print_r($processedUsers);
Результат:
Array
(
[0] => Array
(
[id] => 1
[name] => Анна
[age] => 20
[age_group] => adult
)
[1] => Array
(
[id] => 2
[name] => Петя
[age] => 16
[age_group] => minor
)
)
Ключевые сценарии использования
1. Валидация данных перед сохранением — проверка обязательных полей, форматов, диапазонов значений.
2. Автоматическое обновление полей — установка временных меток, статусов, вычисляемых значений.
3. Обработка ошибок — формирование понятных сообщений для пользователя.
4. Постобработка — логирование, отправка уведомлений, очистка кэша.
5. Модификация данных при выборке — добавление вычисляемых полей, форматирование, объединение данных.