fatfree 框架,验证不成功后重新填充字段
fatfree framework, repopulate fields after unsuccessful validation
我有显示联系表单的 GET 路由,以及当用户提交表单时的 POST 路由,然后在我的控制器方法中我对提交的数据进行了一些验证测试..我现在如何发送给用户如果数据无效,则返回表单,输入的数据将重新填充到表单字段中?
我知道我可以在我的模板中使用 isset(@POST.fieldname)
,但正确的方法是什么
将输入的数据发送回该视图,以及如何将用户重定向回
形式? f3->reroute
方法是否正确?
我认为您可以将输入数据包含在表单视图中作为一项规则。这样,任何表单视图都可以轻松地与任何数据源重复使用。
例如:
您的表单视图:
<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:
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())
我有显示联系表单的 GET 路由,以及当用户提交表单时的 POST 路由,然后在我的控制器方法中我对提交的数据进行了一些验证测试..我现在如何发送给用户如果数据无效,则返回表单,输入的数据将重新填充到表单字段中?
我知道我可以在我的模板中使用 isset(@POST.fieldname)
,但正确的方法是什么
将输入的数据发送回该视图,以及如何将用户重定向回
形式? f3->reroute
方法是否正确?
我认为您可以将输入数据包含在表单视图中作为一项规则。这样,任何表单视图都可以轻松地与任何数据源重复使用。
例如:
您的表单视图:
<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:
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())