# Подписка на события Plesk

Интерфейс обработчиков событий позволяет подписаться на определенное событие в Plesk и вызвать выполнение определенного действия на основании информации о событии. Например, если вам надо создавать зону DNS каждый раз при создании нового домена, используйте обработчики события.

Для выполнения простых действий, таких как запись в журнал информации о событиях Plesk, мы рекомендуем вам использовать механизм отслеживания событий, доступный в интерфейсе Plesk. Чтобы узнать, как использовать этот механизм, смотрите Руководство администратора, раздел Обработчики событий.

Для выполнения более сложных действий Plesk предлагает другой, более гибкий механизм отслеживания событий. Этот механизм позволяет запускать скрипты PHP в зависимости от событий Plesk. В этом разделе мы подробно расскажем о том, как его использовать.

## Как создать обработчик

Обработчики событий просматривают журнал событий Plesk и вызывают метод handleEvent каждый раз при добавлении нового события в журнал. Таким образом, обработчик события не может предотвратить событие. В случае, если попытка выполнить действие не удалась, Plesk не отправляет уведомлений через этот механизм.

Обработчики событий для одного и того же события могут быть запущены в произвольном порядке.

Чтобы добавить обработчик события, создайте `.php`-файл в следующей папке:

- В Linux: `/usr/local/psa/admin/plib/registry/EventListener`

- В Windows: <plesk_dir> `\admin\plib\registry\EventListener`

  Где <plesk_dir> – полный путь к директории, в которой установлен Plesk.

Этот файл должен содержать класс, который реализует метод handleEvent интерфейса `EventListener`. Код должен создавать новый экземпляр этого класса и возвращать его. Например:

    <?php
    class TestEventListener implements EventListener
    {
        public function handleEvent($objectType, $objectId, $action, $oldValues, $newValues)
        {
            // TODO: add implementation here...
        }
    }
    return new TestEventListener();
    ?>

Более подробную информацию о параметрах `handleEvent` смотрите в описании метода handleEvent. Полные списки доступных типов объектов, действий и массивов значений приводятся в соответствующих подразделах этого раздела.

## Добавление обработчиков событий в расширения

Если вы разрабатываете расширение и хотите с его помощью вызывать выполнение определенных действий в зависимости от событий Plesk, добавьте в расширение обработчик событий. Предположим, идентификатор вашего расширения – my-extension.

Чтобы добавить обработчик событий в расширение:

1. Создайте `.php`-файл с содержимым, описанным выше.
2. Измените имя класса на Modules_MyExtension_EventListener. Более подробную информацию о присвоении имен классам в вашем расширении смотрите в разделе Class Naming Conventions.
3. Измените имя файла на `EventHandler.php.`
4. Поместите файл в папку `/plib/library/` внутри папки расширения.

## Обработка только выбранных событий

Обычно обработчики событий отвечают только за обработку ограниченного набора событий. Поэтому рекомендуем явно указать список конкретных событий, которые надо обрабатывать, с помощью метода `filterActions()`. Следующий пример определяет обработчик событий и указывает, что его надо выполнять только при возникновении события „`phys_hosting_delete`“.

    <?php
    class Modules_MyExtension_EventListener implements EventListener
    {
        public function filterActions()
        {
            return [
                'phys_hosting_delete',
            ];
        }

        public function handleEvent($objectType, $objectId, $action, $oldValues, $newValues)
        {
            switch ($action) {
                case 'phys_hosting_delete' :
                   // delete by $objectId or $oldValues
                    break;
            }
        }
    }

    return new Modules_MyExtension_EventListener();
    ?>

Если метод `filterActions()` не определен или возвращает пустой массив, обработчик событий будет получать и обрабатывать все события, что может замедлить работу системы.

## Отладка кода обработчика

Для отладки метода handleEvent вы можете использовать следующий код:

    <?php
    class TestEventListener implements EventListener
    {
        public function handleEvent($objectType, $objectId, $action, $oldValues, $newValues)
        {
                error_log('inside TestEventListener::handleEvent');
        }
    }
    return new TestEventListener();
    ?>

После того как событие произошло, будет вызван этот обработчик.

Вывод результата будет доступен в следующих файлах:

- В Linux: `/var/log/plesk/panel.log`
- В Windows: <plesk_dir> `\admin\logs\php_error.log`