2015-06-07 3 views
0

У меня есть маршрут GET, который показывает форму контакта, и POST-маршрут, когда пользователь отправляет форму, затем в моем методе контроллера я делаю некоторые проверки валидации при подаваемых данных .. как бы я теперь отправить пользователя обратно в форму, если данные недействительны, с введенными данными, которые повторно заполняются в полях формы?fatfree framework, repopulate поля после неуспешной проверки

Я знаю, что могу использовать 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'); 
    } 

} 

В некоторых других контекстах, вы можете кормить вид формы с данными исходящий из db mapper (например, при редактировании записи из бэк-офиса): $this->renderForm($mapper->cast())

+0

Я полагаю, что это также лучше для обеспечения безопасности, с передачей от контроллера к представлению, чем с использованием @ POST.field в поле зрения непосредственно. – branquito

+1

Ну, я не рассматривал этот пункт в моем примере, потому что я думал, что это немного не по теме. Я предполагаю, что предпочтительнее вводить отфильтрованные данные в представление, а не необработанные данные ... хотя нет большого риска не делать этого, поскольку исходные данные не сохраняются в БД на этом этапе. Во всяком случае, я только что обновил этот пример. – xfra35

+0

Итак, теперь, после того как пользователь отправил действительные данные, как можно будет отобразить эту форму снова с сообщением об успешном завершении, предотвращая повторную отправку, нажав f5? должен ли я сделать '$ f3-> clear ('myformdatafields')' в этом 'if ($ form_validated)' block, а затем сделать '$ this-> renderForm()', или нет необходимости очищать переменную, просто вызвать 'renderForm()' без '$ input'? – branquito

Смежные вопросы