Создание формы
Каждая форма должна быть экземпляром 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,
]);
}
На странице это будет выглядеть так:
Шаг 2. Укажите кнопки
Вы можете указать, как будут выглядеть кнопки внизу формы, используя метод addControlButtons:
public function formAction()
{
$form = new pm_Form_Simple();
// form elements are added here
$form->addControlButtons([
'cancelLink' => pm_Context::getModulesListUrl(),
]);
}
В результате этого будут добавлены кнопки OK и Отмена:
Шаг 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; ?>
Теперь вы можете посмотреть форму в вашем расширении и проверить результат ее работы.
Более того, вы можете посмотреть, как будет выглядеть форма на сервере 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;
}
Обычно после обработки формы отображается сообщение об успешном иди неуспешном завершении обработки.
Его можно создать, используя 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; ?>
На странице форма только для чтения выглядит так: