+7 988 353-52-54 kompman1@yandex.ru

г. Краснодар

События, хуки и фоновые задачи

Подписка на события ядра и магазина, вывод своего HTML в тему, задачи планировщика.

События

Подписчик — класс с EventSubscriberInterface в src/; autoconfigure регистрирует его сам.

final class Notify implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            FormSubmitted::class => 'onForm',
            'NewCMS\\Shop\\Event\\OrderPlaced' => 'onOrder',
        ];
    }
}

Полезные события:

СобытиеКогда
EntrySavingEvent, EntrySavedEvent, EntryDeletedEventзапись меняется
FormSubmittedзаявка с формы сохранена (с источником визита)
ModuleEnabledEvent, ModuleDisabledEventмодули
OrderPlaced, OrderPaid, OrderStatusChanged, VariantsChanged, ShopLeadCreatedмагазин
LeadOutcomeCRM сообщила итог заявки

Если модуль не требует магазина, подписывайтесь на события магазина по имени класса строкой — без магазина они просто не придут. Слушатель не должен бросать исключения в запрос посетителя: ловите и пишите в лог.

Хуки темы

HookProviderInterface выводит HTML в точки темы: head, body_top, body_bottom и другие.

final class Widget implements HookProviderInterface
{
    public function supports(string $hook): bool { return $hook === 'body_bottom'; }
    public function priority(): int { return 0; }
    public function render(string $hook, array $context): string { return '<div id="my-widget"></div>'; }
}

Фоновые задачи

Задача — ScheduledTask: описание с интервалом и бюджетом времени и метод run().

final class SyncTask implements ScheduledTask
{
    public function definition(): TaskDefinition
    {
        return new TaskDefinition('mymodule.sync', interval: 300, budget: 30.0, label: 'Sync with …');
    }

    public function run(TaskContext $context): TaskResult
    {
        // работайте, пока $context->remaining() > 0
        return TaskResult::ok('Synced 12');
    }
}

Задачи выполняются после ответа посетителю или по cron (cms:schedule:run). Время ограничено — делите работу на порции и продолжайте в следующий запуск. Состояние задач видно в «Настройки сайта → Система → Фоновые задачи».

Очередь в CRM и сервисы

Для отправки во внешние системы ядро даёт Integration\Outbox (очередь с повторами), Integration\Links (связь записи с объектом во внешней системе), Integration\IntegrationLog (журнал) и Integration\IntegrationHttp (HTTPS с белым списком хостов и защитой от SSRF).

Статья помогла?