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

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. Модификация данных при выборке — добавление вычисляемых полей, форматирование, объединение данных.

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