我有一个带有2个函数的控制器,每个函数都生成一个表单并传递给视图。
第一个是用户个人资料,并完美地获取Validation.yml文件 - 检查姓名和电子邮件是否为空白。
在同一验证文件中,我将密码设置为不为空白。
但是,第二种形式,允许用户更改其密码,不想验证。
第二种形式基本上是第一种形式的副本,但有两个字段,“密码”和“confirmPassword”。
当然,我的字段被称为“密码”,它应该与我的用户实体中的变量匹配? (这是第一种形式发生的事情)
一些代码:
passwordAction
public function passwordAction(Request $request)
{
$form = $this->createFormBuilder()
->add('password', null, array('label' => 'New Password'))
->add('confirmPassword', null, array('label' => 'Confirm Password'))
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as saving the task to the database
//return $this->redirect($this->generateUrl('dashboard'));
}
}
return $this->render('UserBundle:Dashboard:password.html.twig', array('form' => $form->createView()));
}
}
密码表格树枝:( nb - novalidate是关闭html5验证!!)
<form action="{{ path('update_password') }}" method="post" {{ form_enctype(form) }} novalidate="novalidate">
<fieldset>
<legend>Change Your Password</legend>
{{ form_row(form.password) }}
{{ form_row(form.confirmPassword) }}
</fieldset>
<fieldset>
<div class="actions">
<input class="btn primary" type="submit" value="Update" />
<input class="btn error" type="reset" value="Reset">
</div>
</fieldset>
</form>
validation.yml:
UserBundle\Entity\Profile:
properties:
name:
- NotBlank: ~
UserBundle\Entity\User:
properties:
email:
- NotBlank: ~
- Email:
message: The email "{{ value }}" is not a valid email.
checkMX: true
password:
- NotBlank: ~
的routing.yml:
password:
pattern: /password
defaults: { _controller: UserBundle:Dashboard:password }
update_password:
pattern: /password
defaults: { _controller: UserBundle:Dashboard:password }
requirements:
_method: POST
答案 0 :(得分:3)
您尚未在表单中配置任何data_class选项,
并未使用$form->setData($user);
作为表单中的任何数据。
验证器与要验证的任何内容都不匹配,因为没有要验证的UserBundle\Entity\User
对象。
你应该做的是:
$user = new UserBundle\Entity\User; // or fetch it from database.
$form = $this->createFormBuilder()
->add('password', 'repeated')
->getForm()
;
$form->setData($user);
这样,当您将新数据绑定到表单并对其进行验证时,它会知道您正在尝试验证UserBundle\Entity\User
对象。
您会注意到我修改了您的代码以使用repeated
字段类型,这完全符合您的要求。