Обезжиренная структура, заполнить поля после неудачной проверки

У меня есть 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())

Другие вопросы по тегам