我有GET路由显示联系表单,当用户提交表单时有POST路由,然后在我的控制器方法中我对正在提交的数据进行一些验证测试..如果数据是什么,我现在如何将用户发回表单无效,输入的数据是否在表单字段中重新填充?
我知道我可以在我的模板中使用public class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChangedEvent(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
,但是正确的方法是什么
将输入的数据发送回该视图,以及如何将用户重定向回
形成? isset(@POST.fieldname)
方法是正确的吗?
答案 0 :(得分: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())