====== Работа с формами. Валидация данных, пришедших с форм ======
===== Типичная схема работы с формой =====
* При отображении страницы в формной в первый раз необходимо заполнить поля формы первоначальными данными
* При отправке формы необходимо проверить данные
* Если данные введены неверно - необходимо прервать дальнейшую обработку в контроллере и отобразить на той же самой страницы список ошибок валидации. При этом данные в полях формы необходимо сохранить.
* Если все данные введены верно - завершить обработку данных в контроллере.
Рассмотрим пример действия контроллера, который мы взяли из [[limb3:ru:tutorials:basic|CRUD примера]]:
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();
}
?>
Разберем наиболее важные моменты:
* При помощи $this->useForm('news_form') мы указали, что контроллер в данном случае будет работать с активным компонентом
WACT-шаблона "news_form".
* $this->setFormDatasource($news) - передали $news в качестве источника первоначальных данных для формы. Так как ниже идет $news->import($this->request), то есть в новость добавляются все данных из $request-а, мы никогда не потеряем данных в полях формы в случае, если часть из них была введена неверно.
* $news->trySave($this->error_list) - здесь мы фактически произвели валидацию данных. Если trySave() возвращает false это будет значить, что news содержит неверные данные. Ошибки валидации будут содержаться в $this->error_list, который уже был передан по $view в качестве контейнера ошибок для формы "news_form" в WACT-шаблоне.
===== Шаблоны форм =====
При использовании WACT-шаблонизатора формы описываются при помощи обычных тегов