Framework foton
Инструмент для профессиональной разработки web приложений
События для CRUD

use FotonModuleEvents;

Класс предназначен для обработки событий (валидация, уведомления, обновления) перед и после операций с данными. Ключевые особенности:

Свойства:

Основные методы:

  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. Базовая инициализация и проверка наличия обработчика событий

// Данные для инициализации$data = [    "model" => "User",    "table" => "Profile",    "operation" => "create"];// Создаём экземпляр класса$events = new FotonModuleEvents($data);// Проверяем, существует ли обработчик событий для User/Profileif ($events->is()) {    echo "Обработчик событий найден и загружен";} else {    echo "Обработчик событий не найден";}

Пример 2. Предварительная обработка перед созданием записи (before)

Предположим, есть класс-обработчик 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);}

Результат будет содержать:

Пример 3. Постобработка после операции (after)

Добавим метод в класс 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);

Пример 4. Обработка данных для выборки (select)

Добавим метод 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        ))

Ключевые сценарии использования

  1. Валидация данных перед сохранением — проверка обязательных полей, форматов, диапазонов значений.

  2. Автоматическое обновление полей — установка временных меток, статусов, вычисляемых значений.

  3. Обработка ошибок — формирование понятных сообщений для пользователя.

  4. Постобработка — логирование, отправка уведомлений, очистка кэша.

  5. Модификация данных при выборке — добавление вычисляемых полей, форматирование, объединение данных.


© Copyright 2026 Разработано на Framework Foton
Продукт зарегистрирован в Роспатенте