我在注册页面上显示表单错误时遇到问题。
public function createAction {
if ($request->isMethod("POST")) {
$form->bind($request);
if ($form->isValid()){
//do stuf
}
else{
return array("form"=>$form->createView(), "companies"=> urlencode(json_encode($data)));
}
}
现在在我看来:
{{ form_row(form.user.username) }}
{{ form_errors(form.user.username) }}
如果用户名已经在使用,我会得到错误。这是的var_dump
var_dump($form->getErrors());
array(1) {
[0]=>
object(Symfony'Component'Form'FormError)#839 (4) {
["message":"Symfony'Component'Form'FormError":private]=>
string(26) "Username is already in use"
["messageTemplate":protected]=>
string(26) "Username is already in use"
["messageParameters":protected]=>
array(0) {
}
["messagePluralization":protected]=>
NULL
}
}
此处未显示错误:{{ form_errors(form.user.username) }}
在我的用户实体中,我有:
/**
* @ORM'Entity
* @ORM'Table(name="users")
* @UniqueEntity(
* fields={"username"},
* message="Your E-Mail adress has already been registered"
* )
*/
class User implements AdvancedUserInterface, 'Serializable
我在for builder中的所有输入上也有'error_bubbling' => true
。
我也试过$errors = $this->get('validator')->validate( $registration->getUser() );
然后通过'errors' => $errors
查看,但在相应的输入处没有显示消息。
我这样做不对吗?
更新
当我放置{{ form_errors(form) }}
时,会显示错误消息。
您打开了error_bubbling
,因此来自子窗体的所有错误消息都会冒泡到根窗体。
如果要具体显示每个字段的表单错误,请将其设置为false
。
综上所述:
如果是error_bubbling = true
,则显示所有错误,如下所示:
{{ form_errors(form) }}
如果是error_bubbling = false
,则分别显示每个表单的错误:
{{ form_errors(form.user.username) }}