Одно поле в форме не проверяется в Symfony3

Проблема в том, что «confirmPassword» никогда не проходит проверку. Да, есть также все геттеры и сеттеры.

Переменные «тест» и «пароль» подтверждают, что все в порядке.

Я не вижу разницы между этими переменными, за исключением того, что тест имеет текстовый тип и подтверждение пароля, если он имеет тип пароля.

Сообщение «Это значение не должно быть пустым», даже когда я ввожу текст в это поле.

Что здесь не так?

//////////////////////Класс сущностей пользователя (часть):

/**
 * @ORM\Column(type="string", length=128)
 * @Assert\NotBlank (groups={"registration"})
 */
private $password;

/**
* @Assert\NotBlank(
*  groups={"registration"},
* )
*/  
private $confirmPassword;

/**
* @Assert\NotBlank(
*  groups={"registration"},
 */
private $test;

//////////////////////////////////класс типа пользователя:

class Register extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => array('registration'),
        ));
    }  

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username',TextType::class, array('error_bubbling'=>false,'label'=>'Login'))
            ->add('email',  TextType::class, array('error_bubbling'=>false, 'label' => 'E-mail'))
            ->add('password',PasswordType::class, array('error_bubbling'=>false,'label' => 'password'))
            ->add('confirmPassword',PasswordType::class, array('error_bubbling'=>false,'label' => 'password confimation')) 
            ->add('test',TextType::class, array('error_bubbling'=>false,'label' => 'test'))
            ->add('save', SubmitType::class)
        ;
    }
}

//////////////////И, наконец, функция отправки:

public function registerAction(Request $request, $done = 0)
{
    $user = new \AppBundle\Entity\User();

    $form = $this->createForm(Register::class, $user);

    $form->handleRequest($request);

    if ($form->isSubmitted()) {
        $validator = $this->get('validator');

        if($form->isValid()){
            return $this->redirectToRoute('user_register',array('done' => 1));
        }
    }

    return $this->render('front/users/register.html.twig', [
        'form'=>$form->createView(),
        'done'=>$done,
        'errors' => array()
    ]);
}

Изменить: добавлены геттеры и сеттеры. Обратите внимание, что появилась вертикальная полоса прокрутки.

///////////геттеры и сеттеры

 public function getUsername() {
        return $this->username;
    }

    public function getSalt() {
        // you *may* need a real salt depending on your encoder
        // see section on salt below
        return $this->salt;
    }

    public function getPassword() {
        return $this->password;
    }

    public function getRoles() {
        $ret_val = array();
        $roles = $this->getUserRoles();

        if($roles) {
            foreach($roles as $Role) {
                $ret_val[] = $Role->getRoleName();
            }
        }
        return $ret_val;
    }

    public function eraseCredentials() {

    }

    public function getConfirmPassword() {
        return $this->password;
    }

    public function setConfirmPassword($password) {
        $this->confirmPassword = $password;
        return $this;
    }  


/**
 * Set password
 *
 * @param string $password
 *
 * @return User
 */
public function setPassword($password) {
    $this->password = $password;

    return $this;
}

/**
 * Set email
 *
 * @param string $email
 *
 * @return User
 */
public function setEmail($email) {
    $this->email = $email;

    return $this;
}



 /**
     * Get email
     *
     * @return string
     */
    public function getEmail() {
        return $this->email;
    }

    public function setTest($test){
        $this->test = $test;
    }

    public function getTest(){
        return $this->test;
    }

person konrad_firm    schedule 13.01.2016    source источник
comment
Не могли бы вы также показать геттеры и сеттеры вашей сущности?   -  person xabbuh    schedule 13.01.2016
comment
Как насчет использования типа repeated для подтверждения второго пароля? Таким образом, Symfony сама сравнит пароли: symfony.com/doc/current /reference/forms/types/repeated.html   -  person Rvanlaak    schedule 13.01.2016
comment
@xabbuh, привет, не могли бы вы взглянуть на мой обновленный вопрос, я добавил геттеры и сеттеры.   -  person konrad_firm    schedule 13.01.2016
comment
@Rvanlaak: Да, я видел это, просто я изучаю Symfony и пытаюсь понять проблему.   -  person konrad_firm    schedule 13.01.2016
comment
По крайней мере, getConfirmPassword() не возвращает ожидаемое свойство (возвращает $password).   -  person xabbuh    schedule 13.01.2016
comment
@xabbuh - спасибо! Я не знаю, как я это пропустил, я был почти уверен, что это связано с Symfony и не такая уж глупая ошибка :) Если вы ответите, я приму это (если моя репутация достаточно высока, потому что я зарегистрировался около двух недель назад) .   -  person konrad_firm    schedule 13.01.2016
comment
Ах, это решило вашу проблему?   -  person xabbuh    schedule 13.01.2016
comment
@xabbuh: Да, спасибо :)   -  person konrad_firm    schedule 13.01.2016
comment
Звучит немного странно, поскольку сообщение не должно появляться, когда вы вводите обычный пароль (поскольку значение, возвращаемое getConfirmPassword(), тогда не было пустым.   -  person xabbuh    schedule 13.01.2016
comment
Да, я думал именно об этом - так что я проверил несколько раз, и это действительно работает о_О, я сейчас сделаю некоторые тесты.   -  person konrad_firm    schedule 13.01.2016
comment
Ну, после расследования, когда я добавил var_dump($this-›password) в функцию getConfirmPassword, она не вызывается при открытии страницы, а при отправке вызывается дважды, сначала это == null, затем с правильная (введенная) строка. Так что я этого не понимаю. Я потратил уйму времени, только из-за опечатки (точнее из-за ctrl+c ctrl+v). С другой стороны, я не знаю, как фреймворк может помочь мне справиться с этим.   -  person konrad_firm    schedule 13.01.2016


Ответы (1)


Ваш метод getConfirmPassword() не возвращает ожидаемое свойство (он возвращает $password).

person xabbuh    schedule 13.01.2016
comment
Спасибо! Как я и ожидал, у меня слишком низкая репутация, чтобы принять ее, но, насколько я знаю, поскольку я щелкнул по ней, это произойдет, когда у меня будет более высокая репутация. - person konrad_firm; 13.01.2016