2017-09-12 4 views
0

私はDBテーブルに対して検証したい選択フィールド(ドロップダウン)を持っています。symfony 3選択検証問題

値がクエリの結果に含まれている場合は、基本的に有効です。

それはしかし、私はvalidation.ymlファイル持ってsymfonyのガイドで報告されたコールバックがどのように機能するか:(

私にはそれほど明確ではないのです。

User\UserBundle\Entity\Group: 
    properties: 
     role: 
      - Choice: 
       groups: [signUp] 
       callback: [User\UserBundle\Entity\Group, getRoles] 

エンティティGroup.php

class Group 
{ 
    /** @var int */ 
    private $id; 

    //... 

    public static function GetRoles() 
    { 
     return ['admin', 'user']; 
    } 
} 

をこの例は正常に動作しますが、グループリポジトリからそれらの値を取得しようとすると問題が発生しますGroupRepository.php

class GroupRepository extends EntityRepository 
{ 
    public function getRoles() 
    { 
     return $this->createQueryBuilder('r') 
      ->getQuery() 
      ->getResult(); 
    } 
} 

私はこの段階で何をすべきですか?私が使用したアプローチが正しく、またはvalidation.ymlに直接グループリポジトリを呼び出す必要がありますか?または私は完全に方法ですか?私はあなたのようなリポジトリからこれらのオプションを取得しようとしていることを理解したよう

+0

を参照してください。データベースデータに基づいています。 – xabbuh

+0

カスタム検証クラスを作成する必要があります。また、バリデータ内でデータベースにアクセスする必要があるため、サービスとして宣言し、ORM https://symfony.com/doc/current/validation/custom_constraint.html#constraint-validators-with-dependenciesを挿入する必要があります。 – sdespont

答えて

1

... 
callback: [User\UserBundle\Repository\GroupRepository, getRoles] 

リポジトリは教義ORMサービスを通じて初期化する必要がありますので、これは動作しません。

カスタムConstraintクラスとConstraintValidatorを作成する必要があります。後でサービスとして設定し、エンティティマネージャを引数として渡します。

、あなたの選択を投入することを可能にするEntityTypeを(http://symfony.com/doc/current/reference/forms/types/entity.htmlを参照)を使用したいようですが、私には見えますhttp://symfony.com/doc/current/validation/custom_constraint.html