Если вы используете пакет WEB_APP, тогда наиболее логичным будет работа с формами при помощи класса lmbFormCommand. Этот класс всего лишь является командой, которая содержит различные способы ее расширения (использован паттерн observer).
В простых случаях для работы с формами через lmbFormCommand ее расширяют методами, которые содержатся в самом дочернем классе, например:
<?php lmb_require('limb/web_app/src/command/lmbFormCommand.class.php'); class LectureCreateCommand extends lmbFormCommand{ function __construct() { parent :: __construct($template_path = 'lecture/create.html', $form_id = 'lecture_form'); $this->registerOnValidCallback($this, 'create'); $this->registerOnShowCallback($this, 'initForm'); } function initForm($form){ [...] } function create($form){ [...] } } ?>
Метод initForm($form) будет вызван, если форма будет отображена в первый раз, метод сreate($form) будет вызван, если форма была отослана пользователем и все данные были введены верно.
При использовании WACT-шаблонизатора формы описываются при помощи обычных тегов <form> с указанием атрибута runat='server'. lmbFormCommand построен таким образом, что он считает форму отосланной, если в запросе есть атрибут submitted, поэтому в шаблоне обычно присутствует скрытое поле с таким названием, например:
<form id='lecture_form' name='lecture_form' method='post' runat='server'> <core:INCLUDE file='form_errors.html'/> <div class="field" > <label for="title" runat="server">Заголовок</label> <input type="text" name="title" size="40" class='req' title='Заголовок'/> </div> <input name='submitted' type='hidden' value='1' runat='client'/> <div class='form-buttons'> <input id='cancel' type='button' value="Отменить" onclick='window.close();return false;'/> <input id='save' type='button' value="Создать/Изменить"/> </div> /form>
Обратите внимание на атрибут runat='client' тега <input name='submitted' type='hidden'/>. Подробнее об этом: работа с generic tags в wact-шаблонах, смотрите работу с html тегами для форм на этой же странице).
Обратите внимание на атрибут title <input> тега. Значение этого атрибута используется при отображении ошибок валидации (см. ниже).
lmbFormCommand передает все свои данные и ошибки валидации во View, откуда они при попадают в шаблон. Если это WACT-шаблон, тогда при возникновении ошибки валидации на форме, данные с формы не будут потеряны, все элементы при повторном отображении формы заново получат свои значения, которые в них были на момент отправки формы. Также в WACT-компоненты, связанные с работой форм, уже встроены средства для отображения ошибок валидации (см. ниже).
Обсуждение