【发布时间】:2013-12-24 03:00:47
【问题描述】:
我是 Symfony2 的初学者。我阅读了食谱,并在互联网上搜索,但没有找到关于我的问题的答案。
这是我的表单类型:
/**
* Builds a form with given fields.
*
* @param object $builder A Formbuilder interface object
* @param array $options An array of options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('password', 'repeated', array(
'first_name' => 'password',
'second_name' => 'confirm',
'type' => 'password',
'invalid_message' => 'Passwords do not match'
));
}
/**
* Sets the default form options
*
* @param object $resolver An OptionsResolver interface object
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Opit\Notes\UserBundle\Entity\User',
));
}
/**
* Get the name
*
* @return string name
*/
public function getName()
{
return 'user';
}
用户是一个实体
这是树枝:
<form name="changePassword_frm" id="changePassword_frm" method="post">
<div class="modalwindow width-98 default-border height-auto overflow-hidden">
{{ form_widget(form) }}
</div>
以及我的用户控制器中的函数(由 ajax 请求调用)
public function updatePasswordAction()
{
$result = array('response' => 'error');
$request = $this->getRequest();
$em = $this->getDoctrine()->getManager();
$user = $this->getUserObject($request->attributes->get('id'));
$form = $this->createForm(new ChangePasswordType(), $user);
if ($request->isMethod("POST")) {
$form->handleRequest($request);
if ($form->isValid()) {
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
$newPassword = $encoder->encodePassword($user->getPassword(), $user->getSalt());
$user->setPassword($newPassword);
// Save the user.
$em->persist($user);
$em->flush();
$result['response'] = 'success';
}
}
return new JsonResponse(array($result));
}
验证不起作用,例如,如果我只填写了第一个字段(确认 - 第二个没有)。它是有效的!...所以 valid() 方法不会检查两个字段的值是否相等...
但是,如果我只填写“密码”字段而不填写“确认”字段...那么数据库中的密码将是散列的空字符串。 如果我填写两个,它们是相同的。它将是数据库中给定的密码。 (它有效,因为我可以用它登录到我的页面)。
但我不知道,为什么验证不起作用?为什么我没有收到任何错误信息? 我检查过,总是进入 isValid() 方法......总是。
【问题讨论】:
标签: forms validation symfony passwords