use FotonModuleEvents;
Класс предназначен для обработки событий (валидация, уведомления, обновления) перед и после операций с данными. Ключевые особенности:
Свойства:
$arr — входные данные;
$eventClass — динамически загружаемый класс событий;
$core — ссылка на ядро системы ($FotonCore);
$noticeKey — ключ для уведомлений.
Основные методы:
__construct($arr) — конструктор, инициализирует свойства класса.
is() — проверяет существование класса событий для модели и таблицы, загружает его.
update($arr, $fields) — обновляет поля согласно настройкам в $arr["update"].
valid($arr, $fields) — применяет валидацию к полям (индивидуальную или общую).
isValid($arr, $fields) — проверяет поля на соответствие условиям, добавляет уведомления об ошибках.
notice($arr, $fields) — проверяет обязательные поля, формирует уведомления.
events($arr) — объединяет обработку уведомлений, валидации и обновлений.
before() — выполняет предварительную обработку перед операцией (вызывает метод before_* из $eventClass, затем events()).
after($arr) — выполняет постобработку после операции (вызывает метод after_* из $eventClass).
select($arr) — обрабатывает данные для выборки (вызывает метод select из $eventClass).
// Данные для инициализации$data = [ "model" => "User", "table" => "Profile", "operation" => "create"];// Создаём экземпляр класса$events = new FotonModuleEvents($data);// Проверяем, существует ли обработчик событий для User/Profileif ($events->is()) { echo "Обработчик событий найден и загружен";} else { echo "Обработчик событий не найден";}Предположим, есть класс-обработчик ModelSiteEventsUserProfile:
namespace ModelSiteEventsUser;class Profile{ public function before_create($arr) { // Добавляем временную метку создания $arr["create"]["created_at"] = date("Y-m-d H:i:s"); return $arr; }}Использование:
$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 FotonModuleEvents($data);if ($events->is()) { $processedData = $events->before(); print_r($processedData);}Результат будет содержать:
обязательные проверки для полей name и email;
валидацию email и возраста;
проверку возраста на минимальное значение;
автоматическое обновление поля status до active;
добавленную временную метку created_at.
Добавим метод в класс Profile:
public function after_create($arr){ // Логируем создание пользователя $log = new DevModuleLog; $log->add("User created: " . $arr["name"]); // Отправляем приветственное письмо $this->core->mail($arr["from"], $arr["to"], $arr["subject"], $arr["message"]); return $arr;}Использование:
// Предположим, у нас есть результат операции создания$result = [ "id" => 123, "name" => "Иван Иванов", "email" => "ivan@example.com"];$processedResult = $events->after($result);Добавим метод select в класс Profile:
public function select($arr){ // Добавляем вычисляемое поле foreach ($arr as &$user) { $user["age_group"] = $user["age"] >= 18 ? "adult" : "minor"; } return $arr;}Использование:
$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 ))Валидация данных перед сохранением — проверка обязательных полей, форматов, диапазонов значений.
Автоматическое обновление полей — установка временных меток, статусов, вычисляемых значений.
Обработка ошибок — формирование понятных сообщений для пользователя.
Постобработка — логирование, отправка уведомлений, очистка кэша.
Модификация данных при выборке — добавление вычисляемых полей, форматирование, объединение данных.