2017-09-12 11 views
0

DB 테이블에 대해 유효성을 검사 할 선택 필드 (드롭 다운)가 있습니다.symfony 3 선택 확인 문제

기본적으로 값이 쿼리 결과에있는 경우 유효합니다. 그것은 심포니 가이드에보고 된 콜백이 작동하는 방법 :(그러나

내게 너무 분명하지 않다

, 나는 validation.yml 파일이 있습니다

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를 만들어야하는데, 나중에이 서비스가 서비스로 구성되고 엔터티 관리자가 인수로 전달됩니다.

당신의 선택을 채울 수 있습니다 http://symfony.com/doc/current/validation/custom_constraint.html 당신이 (http://symfony.com/doc/current/reference/forms/types/entity.html 참조) EntityType을 사용할 것 나에게 보이는