Проверка не работает для второй формы в контроллере - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть контроллер с 2 функциями, каждая из которых генерирует форму и передает ее в представление.

Первый предназначен для профиля пользователя и отлично подбирает файл Validation.yml - проверяя, чтобы имя и адрес электронной почты не были пустыми.

В том же файле проверки я установил пароль не пустым.

Однако вторая форма, которая позволит пользователю изменить свой пароль, не хочет проверять.

Вторая форма - это, в основном, копия первой, но с двумя полями: «пароль» и «пароль подтверждения».

Конечно, поскольку мое поле называется "пароль", оно должно соответствовать переменной в моем объекте User? (это то, что происходит с первой формой)

Код:

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

1 Ответ

3 голосов
/ 02 февраля 2012

Вы не настроили ни одной опции 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, который делает именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...