Каждая форма должна быть экземпляром 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->addControlButtons([
 'cancelLink' => pm_Context::getModulesListUrl(),
 ]);
}

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

image-79410.png

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

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

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

 // здесь определяются элементы и кнопки формы

 $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();

 // здесь определяются элементы и кнопки формы

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

 // Обработайте/сохраните здесь значения

 $this->_status->addInfo('Данные сохранены успешно.');
 $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):

Текущий пользователь:
<?php echo $this->form; ?>

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

image-79413.png