# Расширение форм Plesk

Plesk SDK API позволяет расширять формы Plesk, добавляя в них собственное содержимое. Соответствующий хук позволяет добавлять элементы управления из расширения в любую форму Plesk, например:

- Секция развертывания Git на странице создания домена.
- Приложения Ruby / Python на странице создания домена.
- Ссылка на учетные записи в социальных сетях в профиле.
- Двухфакторная авторизация в профиле.

Этот хук разработан для добавления подформ из всех расширений во время визуализации формы. Можно использовать экземпляры pm_Form_SubForm, но это необязательно.

Примечание

Поддерживаются только формы Zend (те, у которых URL-адрес начинается с `/smb/` и `/admin/`).

Жизненный цикл каждой формы Plesk состоит из 3 этапов:

- init: добавление элементов с первоначальными значениями.
- isValid: проверка валидаторов для каждого элемента, перезаписанный метод может предотвратить или расширить валидацию.
- process: выполнение действий, сохранение новых значений и так далее.

Каждый этап инициирует выполнение соответствующего метода в подформе. Чтобы определить, какая форма будет обрабатываться хуком, в хуке передаются следующие аргументы: $controller, $action и $formId.

## Примеры

Хук должен быть создан в `plib/hooks/Form.php`

    class Modules_Git_Form extends pm_Hook_Form
    {
        public function getSubForms($controller, $action, $formId)
        {
            if (in_array($formId, [static::FORM_CREATE_SUBSCRIPTION, static::FORM_CREATE_CUSTOMER])) {
                $subForm = new AddWithDomain(['context' => [
                    'isSubscriptionCreation' => true,
                ], 'moveBefore' => 'subscription-subscriptionInfo']);
            } elseif (in_array($formId, [static::FORM_CREATE_DOMAIN, static::FORM_CREATE_SUBDOMAIN])) {
                $subForm = new AddWithDomain(['context' => [
                    'isDomain' => static::FORM_CREATE_DOMAIN === $formId,
                    'isSubscriptionCreation' => false,
                ], 'moveAfter' => 'hostingSettings']);
            } else {
                return [];
            }
            return ['git' => $subForm];
        }
    }