Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:usage:form_processing

Работа с формами. Валидация данных, пришедших с форм

Команды для работы с формами

Если вы используете пакет 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> тега. Значение этого атрибута используется при отображении ошибок валидации (см. ниже).

Почему выгодно использовать WACT-шаблоны для работы с формами

lmbFormCommand передает все свои данные и ошибки валидации во View, откуда они при попадают в шаблон. Если это WACT-шаблон, тогда при возникновении ошибки валидации на форме, данные с формы не будут потеряны, все элементы при повторном отображении формы заново получат свои значения, которые в них были на момент отправки формы. Также в WACT-компоненты, связанные с работой форм, уже встроены средства для отображения ошибок валидации (см. ниже).

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
   ____     __   ____ __  __   ____
  / __/ __ / /  / __/ \ \/ /  / __/
 _\ \  / // /  _\ \    \  /  / _/  
/___/  \___/  /___/    /_/  /___/
 
limb3_2007_2/ru/usage/form_processing.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)