php - form - Symfony2のグループシーケンスバリデータに関する問題



forms validation (1)

エラーが他のものの前に表示される理由は、それをメソッドバリデータとして使用し、Symfonyはエラーメッセージをフォームインスタンスではなくフォームフィールドに割り当てます。

編集:

すべてのフォームにerror_mappingオプションがあり、エラーメッセージの表示場所を定義できます。

あなたの場合は、次のようになります:

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

私はSymfony2の世界では新しいです。 私が問題に遭遇したとき、私はSymfony2の検証の基礎を学びようとしていました。 このguideによれば、一連の検証グループを適切に管理するには、このアノテーションの行をEntityクラスに追加する必要があります。

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

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

つまり、私は同じ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()が起動します。

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





validation