====== Работа с формами. Валидация данных, пришедших с форм ====== ===== Типичная схема работы с формой ===== * При отображении страницы в формной в первый раз необходимо заполнить поля формы первоначальными данными * При отправке формы необходимо проверить данные * Если данные введены неверно - необходимо прервать дальнейшую обработку в контроллере и отобразить на той же самой страницы список ошибок валидации. При этом данные в полях формы необходимо сохранить. * Если все данные введены верно - завершить обработку данных в контроллере. Рассмотрим пример действия контроллера, который мы взяли из [[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-шаблонизатора формы описываются при помощи обычных тегов
с указанием атрибута //runat='server'//, например:
/form>
Обратите внимание на атрибут **title** тега. Значение этого атрибута используется при отображении ошибок валидации. Например, вместо "title обязателty к заполнению", выведентся "Заголовок обязателен к заполнению". ===== Вывод ошибок валидации ===== Для вывода ошибок использутеся тег [[limb3:ru:packages:wact:tags:form_tags:form_errors_tag|]] (в некоторых случаях ), который передает список ошибок валидации из формы, внутри которой находится этот тег, в компонент, указанный атрибутом target, например: [...] Ошибки валидации:
  • {$message}
[...]
===== Валидация ===== Подробнее про валидацию данных, пришедних с формы, лучше почитать на странице [[validation|"Валидация данных"]]. ===== Что еще почитать? ===== * [[limb3:ru:packages:wact:form_tags|Теги форм с активными компонентами или без]] * [[limb3:ru:packages:wact:tags:form_tags:form_tag|WACT тег
]]