Содержание

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

Типичная схема работы с формой

Рассмотрим пример действия контроллера, который мы взяли из CRUD примера:

<?php
class NewsController extends lmbController
{
  [...]
  function doEdit()
  {
    $news = new News((int)$this->request->get('id'));
 
    $this->useForm('news_form');
    $this->setFormDatasource($news);
 
    if(!$this->request->hasPost())
      return;
 
    $news->import($this->request);
 
    if($news->trySave($this->error_list))
      $this->redirect();
  } 
?>

Разберем наиболее важные моменты:

WACT-шаблона «news_form».

Шаблоны форм

При использовании WACT-шаблонизатора формы описываются при помощи обычных тегов <form> с указанием атрибута runat='server', например:

<form id='news_form' name='news_form' method='post' runat='server'>
 
  <core:INCLUDE file='form_errors.html'/>
 
  <label for="title">Заголовок</label>
  <input type="text" name="title" size="40" title='Заголовок'>
 
  <br/>
  <input id='cancel' type='button' value="Отменить" onclick='window.close();return false;'>
  <input id='save' type='button' value="Создать/Изменить">
/form>

Обратите внимание на атрибут title <input> тега. Значение этого атрибута используется при отображении ошибок валидации. Например, вместо «title обязателty к заполнению», выведентся «Заголовок обязателен к заполнению».

Вывод ошибок валидации

Для вывода ошибок использутеся тег <form:errors> (в некоторых случаях <form:field_errors>), который передает список ошибок валидации из формы, внутри которой находится этот тег, в компонент, указанный атрибутом target, например:

<form id='news_form' name='news_form' method='post' runat='server'>
[...]
<form:errors target='errors'/>
 
<list:list id='errors'>
Ошибки валидации:
<ul>
<list:ITEM>
  <li>{$message}</li>
</list:ITEM>
</ul>
</list:list>
 
[...]
</form>

Валидация

Подробнее про валидацию данных, пришедних с формы, лучше почитать на странице "Валидация данных".

Что еще почитать?