Я новичок в Symfony2. Я читал поваренную книгу и искал в Интернете, но я не нашел ответа на мою проблему.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() не проверяет, что значение двух полей равно или равно ...
Однако, если я заполню только поле «пароль» и «подтвердите», field not ... Тогда пароль в базе данных будет хэшированной пустой строкой. Если я заполню оба, и они одинаковые. Это будет пароль в базе данных. (Это работает, потому что я могу войти с ним на мою страницу).
Но я не знаю, почему не работает проверка? И почему я не получил сообщение об ошибке? Я проверил и всегда перехожу в метод isValid() ... всегда.
Это решение проблемы? –
Почти единственная проблема, в которой не отображается недопустимое сообщение. –
Вы уверены, что не оставите это с Twig? Сделайте {{form (form)}} или {{form_row (form.password)}}, и это будет включать в себя раздел form_error, который, я думаю, вам не хватает. –