Обезжиренная структура, заполнить поля после неудачной проверки
У меня есть GET-маршрут, который показывает контактную форму, и POST-маршрут, когда пользователь отправляет форму, затем в моем методе контроллера я провожу некоторые проверочные тесты для отправляемых данных... как бы я теперь отправил пользователя обратно в форму, если данные недействительны, с введенными данными, повторно заполняемыми в полях формы?
Я знаю, что могу использовать isset(@POST.fieldname)
в моем шаблоне, но как правильно отправить введенные данные обратно в это представление и как перенаправить пользователя обратно в форму? Это f3->reroute
метод правильный способ сделать это?
1 ответ
Я думаю, что вы можете взять как правило, чтобы включить входные данные в ваши представления формы. Таким образом, любое представление формы будет легко повторно использоваться с любым источником данных.
Например:
Ваш вид формы:
<form action="" method="post">
<input type="text" name="email" value="{{ @@input.email }}"/>
<input type="text" name="message" value="{{ @@input.message }}"/>
<button type="submit">Submit form</button>
</form>
Ваш контроллер класса:
class myController {
function get($f3) {
$this->renderForm();
}
function post($f3) {
$post=$f3->clean($_POST);
//validate form data here
if ($form_validated) {//valid form data
} else //invalid form data
$this->renderForm($post);
}
protected function renderForm($input=array()) {
$tpl=Template::instance();
//variant 1:
echo $tpl->render('form.html','text/html',array('input'=>$input))
// or variant 2:
Base::instance()->set('input',$input);
echo $tpl->render('form.html');
}
}
В некоторых других контекстах вы можете передать представление формы данными, поступающими из преобразователя базы данных (например, при редактировании записи из бэк-офиса): $this->renderForm($mapper->cast())