21 votos

Tema en grupo secuencia validador en Symfony2

Soy nuevo en Symfony2 mundo. Yo estaba tratando de aprender los conceptos básicos de la Validación en Symfony2 cuando me encontré con un problema con él. De acuerdo a la guía, para gestionar adecuadamente una secuencia de validación de los grupos tiene que agregar esta anotación a la línea en su Entity clase:

/**
 * @Assert\GroupSequence({"User", "Strict"})
 */

Y poner un poco de anotación dondequiera que usted desea para manejar la norma apropiada. En mi caso, así como uno de la guía es el password de campo que debe ser válida sólo si en primer lugar se ha compilado (y respeta mis reglas, tales como la longitud mínima) y, a continuación, si es diferente de la username de su valor. El problema es que no trabajo para mí!

Quiero decir, yo tengo el mismo User de clase y he utilizado la misma forma de su ejemplo:

$form = $this->createFormBuilder($user, array('validation_groups' => array('signup','strict')))
        ->add('name', 'text')
        ->add('email', 'text')
        ->add('password', 'password')
        ->add('signup', 'submit')
        ->getForm();

Aquí está mi User clase:

<?php

namespace XXX\SiteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity
 * @Assert\GroupSequence({"User", "signup", "strict"}) 
 */
class User
{
    //..

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     * @Assert\NotBlank(groups={"signup"})
     * @Assert\Length(min=3,groups={"signup"})
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255)
     * @Assert\NotBlank(groups={"signup"})
     * @Assert\Length(min=7,groups={"signup"})     
     */
    private $password;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255)
     * @Assert\NotBlank(groups={"signup"})     
     * @Assert\Email(checkMX=true, groups={"signup"})     
     */
    private $email;

    /**
     * @Assert\True(groups={"strict"})
     */
    public function isPasswordLegal()
    {
        return $this->name != $this->password;
    }

    //..some getter\setter methods
}

Cuando yo envíe el formulario sin poner los valores en los campos que me muestra todos los errores (y es cierto), pero también uno que isPasswordLegal() lanza, incluso ANTES que los demás!

Lo que me estoy perdiendo? Muchas gracias a todos!

1voto

naitsirch Puntos 747

La razón por la que aparece el error antes que los otros, que se utilizan como un método validator y Symfony asigna el mensaje de error en el formulario de instancia y no el campo de formulario.

Editar:

Todas las formas de proporcionar la error_mapping opción que le permite definir donde los mensajes de error deben ser demostrado.

En su caso tendría este aspecto:

$options = array(
    'validation_groups' => array('signup','strict'),
    'error_mapping' => array(
        'isPasswordLegal' => 'password',
    ),
);
$form = $this->createFormBuilder($user, $options)
    ->add('name', 'text')
    ->add('email', 'text')
    ->add('password', 'password')
    ->add('signup', 'submit')
    ->getForm();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: