Каждая форма должна быть экземпляром pm_Form_Simple , чтобы выглядеть так же, как остальные формы в Plesk. В большинстве случаев вы можете использовать такие же возможности, как и для Zend_Form. А именно, вы можете:

Шаг 1. Указать элементы

По сути, вам надо добавлять элементы к форме, используя метод addElement. Существует несколько стандартных элементов, таких как «text» или «select», и они обладают той же гибкостью, что и Zend_Form, включая способность указывать декораторы для сложных элементов:

public function formAction()
{
    $form = new pm_Form_Simple();
    $form->addElement('text', 'exampleText', [
        'label' => 'Example Text',
        'value' => 'Default value',
        'required' => true,
    ]);
}

На странице это будет выглядеть так:

image-79409.png

Шаг 2. Укажите кнопки

Вы можете указать, как будут выглядеть кнопки внизу формы, используя метод addControlButtons:

public function formAction()
{
    $form = new pm_Form_Simple();

    // form elements are added here

    $form->addControlButtons([
        'cancelLink' => pm_Context::getModulesListUrl(),
    ]);
}

В результате этого будут добавлены кнопки OK и Отмена:

image-79410.png

Шаг 3. Определите представление

Прежде всего вам надо передать форму из контроллера в представление:

public function formAction()
{
    $form = new pm_Form_Simple();

    // form elements and buttons are defined here

    $this->view->form = $form;
}

А затем отобразить ее в представлении (в файле .phtml):

<?php echo $this->form; ?>

Теперь вы можете посмотреть форму в вашем расширении и проверить результат ее работы.

image-79411.png

Более того, вы можете посмотреть, как будет выглядеть форма на сервере Plesk с использованием другой цветовой схемы или стиля (например, когда установлено расширение Skins and Color Schemes) или как будет выглядеть форма в интерфейсе, адаптированном к мобильным устройствам.

Шаг 4. Валидация и обработка формы

Следующий шаг – валидировать форму и обработать ее в момент сохранения пользователем. Рекомендуется сделать это в контроллере в том же действии. Чтобы валидировать форму, вы можете указать валидаторы для элементов или можете создать класс для своей формы в папке library, наследовать его от класса pm_Form_Simple и перезаписать метод isValid (чтобы посмотреть пример такой формы, обратитесь к https://github.com/plesk/ext-route53/blob/master/plib/library/Form/Settings.php, а пример использования можно посмотреть в https://github.com/plesk/ext-route53/blob/master/plib/controllers/IndexController.php в indexAction).

public function formAction()
{
    $form = new pm_Form_Simple();

    // form elements and buttons are defined here

    if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
        $value = $form->getValue('exampleText');

        // Proccess/save value here

        $this->_status->addInfo('Data was successfully saved.');
        $this->_helper->json(['redirect' => pm_Context::getBaseUrl() ]);
    }

    $this->view->form = $form;
}

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

image-79412.png

Его можно создать, используя pm_View_Status , как показано в примере выше. Вы также можете указать, куда следует перенаправить пользователя после завершения обработки формы с помощью параметра «redirect» ответа JSON и помощников pm_Context для составления URL.

Формы только для чтения

Другим часто используемым типом страниц в Plesk является страница с обзором какого-либо объекта. Она может быть реализована как форма, все поля которой помечены как поля только для чтения. Например, вы можете создать такое действие (мы использовали pm_Session, чтобы получить экземпляр учетной записи текущего пользователя pm_Client):

public function overviewAction()
{
    $client = pm_Session::getClient();
    $form = new pm_Form_Simple();
    $form->addElement('text', 'name', [
        'label' => 'Name',
        'value' => $client->getProperty('pname') ,
        'readonly' => true,
    ]);
    $form->addElement('text', 'email', [
        'label' => 'Email',
        'value' => $client->getProperty('email') ,
        'readonly' => true,
    ]);
    $this->view->form = $form;
}

Затем добавьте ее к представлению (overview.phtml):

Current logged in user:
<?php echo $this->form; ?>

На странице форма только для чтения выглядит так:

image-79413.png