2012-08-27 3 views
5

フォームバリデーターを登録フォームに追加しようとしているDoctrineユーザーエンティティを持っていますが、どんな条件でも登録フォームに対して起動しません。バリデーションの制約が登録フォームのためにトリガーされない

マイユーザエンティティ:

namespace JMSHockey\AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\User\AdvancedUserInterface; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 
/** 
* My\AppBundle\Entity\User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity(repositoryClass="My\AppBundle\Entity\UserRepository") 
* @UniqueEntity(fields={"email"}, message="Sorry, this email address is already in use.", groups={"registration"}) 
* @UniqueEntity(fields={"username"}, message="Sorry, this username is already taken.", groups={"registration"}) 
*/ 
class User implements AdvancedUserInterface,\Serializable 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string $email 
    * 
    * @ORM\Column(name="email", type="string", length=75, nullable=false) 
    * @Assert\Email() 
    * @Assert\NotBlank() 
    */ 
    private $email; 

    /** 
    * @var string $username 
    * 
    * @ORM\Column(name="username", type="string", length=75, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    private $username; 

    ... 
    } 

ここに私のUserTypeフォームです:

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class UserType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('email','email'); 
     $builder->add('username','text'); 
     ... 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'data_class' => 'My\AppBundle\Entity\User', 
      'validation_groups' => array('registration'), 
     ); 
    } 

    public function getName() 
    { 
     return 'user'; 
    } 
} 

そして最後に、登録フォーム:

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('user', new UserType()); 
    } 

    public function getName() 
    { 
     return 'registration'; 
    } 
} 

は、私が何かを明らかに不足しているしなければならないように思えsymfonyマニュアルと私がオンラインで見つけたリソースとの間に、私はdetをすることができませんでしたそれが何であるかを判断する。

+1

はhttp://symfony.com([有効]あなたを持っています/doc/current/book/validation.html#configuration)検証のための注釈? – meze

+0

はい、フレームワークセクションの下のconfig.ymlに 'validation:{enable_annotations:true}'を設定しました。 –

+0

あなたの登録タイプにcascade_validationを特別に設定しようとしましたか? – m0c

答えて

0

このグループのオプションはどこにありましたか?

空白のままにすると、このエンティティに対してトリガーされます。エンティティを指定する場合は、emオプションを使用する必要があります。

http://symfony.com/doc/master/reference/constraints/UniqueEntity.html#em

+0

グループオプションは、制約が登録フォームにのみ降格されるようにするためです。 1回の更新で制約が発生しないようにするか、毎回電子メールアドレスを変更せずにオブジェクトを更新できないようにします。 –

+0

@Andy、これは間違っています。電子メールまたはユーザー名を変更せずにオブジェクトを更新しようとすると、検証は失敗しません。この検証は、このフィールドが一意であることをチェックします。つまり、他のレコードにはこの値がありません。更新するときは、ITSELFに対してこれをチェックしないので、問題ありません。 validation_groupとgroupsオプションを削除してみましたか? –

2

私は同じ問題を抱えていました。

私はあなたのRegistrationTypeクラスのsetDefaultOptions方法で真で追加cascade_validationことによってそれを解決してOptionsResolver symfonyのコンポーネントからOptionsResolverInterfaceクラスを使用:

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('user', new UserType()); 
    } 

    public function getName() 
    { 
     return 'registration'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'cascade_validation' => true 
     )); 
    } 
} 
関連する問題