22

私はSymfony2の世界が初めてです。問題に遭遇したとき、私は Symfony2 で検証の基本を学ぼうとしていました。ガイドによると、一連の検証グループを適切に管理するには、この注釈の行をEntityクラスに追加する必要があります。

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

そして、適切なルールを処理したい場所に注釈を付けます。私の場合、ガイドの1つは、password最初にコンパイルされた場合(および最小長などのルールを尊重する場合)にのみ有効であり、次に値と異なる場合にのみ有効なフィールドですusername。問題は、それがうまくいかないことです!

つまり、同じUserクラスがあり、同じ形式の例を使用しました。

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

これが私のUserクラスです:

<?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
}

フィールドに値を入力せずにフォームを送信すると、すべてのエラーが表示されます (そのとおりです) だけでなく、isPasswordLegal()起動するエラーも表示されます。

私は何が欠けていますか?皆さん、ありがとうございました!

4

1 に答える 1