La validación no funciona para la segunda forma en el controlador

Tengo un controlador con 2 funciones, cada una con un formulario que se genera y se pasa a una vista.

El primero es para un perfil de usuario y recoge el archivo Validation.yml perfectamente, verificando que el nombre y el correo electrónico no estén en blanco.

En el mismo archivo de validación, configuré la contraseña para que no esté en blanco.

Sin embargo, el segundo formulario, que permitirá a un usuario cambiar su contraseña, no quiere validar.

El segundo formulario es básicamente una copia del primero, pero con dos campos, "contraseña" y "confirmar contraseña".

Seguramente, como mi campo se llama "contraseña", debería coincidir con la variable en mi entidad de usuario. (esto es lo que está sucediendo para la primera forma)

Algún código:

contraseñaAcción

    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()));
    }
}

forma de contraseña twig: (nb - ¡¡la no validación es desactivar la validación 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

preguntado el 02 de febrero de 12 a las 11:02

1 Respuestas

No ha configurado ninguna opción data_class en su formulario, ni ha puesto ningún dato en su formulario, utilizando $form->setData($user); por ejemplo.

El validador no coincide con nada para validar porque no hay UserBundle\Entity\User objeto a validar.

Lo que debes hacer es:

 $user = new UserBundle\Entity\User; // or fetch it from database.

 $form = $this->createFormBuilder()
     ->add('password', 'repeated')
     ->getForm()
 ;
 $form->setData($user);

De esta manera, cuando vincule nuevos datos a su formulario y lo valide, sabrá que está tratando de validar un UserBundle\Entity\User objeto.

Notarás que modifiqué tu código para usar un repeated tipo de campo, que hacen exactamente lo que quieres.

Respondido 02 Feb 12, 21:02

Jaja, sí, lo descubrí no mucho después, pero muchas gracias por responder :) - Señor pablo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.