2012-01-24 12 views
2

제 양식에는 entity 유형의 필드가 있습니다. 양식을 제출할 때 해당 엔티티의 유효성을 비활성화하는 방법은 무엇입니까? 이 엔티티는 이미 데이터베이스에 저장되어 있으므로 유효성 검사기가 내 관점에서이 엔티티의 유효성을 검사 할 필요가 없습니다.Symfony2의 엔티티 양식 필드 및 유효성 검사?

편집 :

코드는 다음과 같습니다

class SearchRequest 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="ArticlePattern") 
    * @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE") 
    * @Assert\NotBlank 
    */ 
    private $articlePattern; 
} 

양식 필드 :

$builder 
    ->add('articlePattern', 'entity', array('class' => 'LonbitItssBundle:ArticlePattern') 

검증 그룹이 작동하지 않습니다을 내가 달성하고자하는에 검증을 위해이기 때문에 $articlePattern 필드의 제약 @Assert\NotBlank을 확인하십시오. 그러나 저는 그가 c에서 정의 된 제약 조건을 검사하기를 원하지 않습니다. 기사 패턴. 즉, $ validator가 $ articlePattern 객체 내에서 내림하지 못하도록하고 싶지만 $ articlePattern 필드 자체에 대한 제약 조건을 유효성을 검사하기를 원합니다.

어떻게 할 수 있습니까?

는 EDIT2 :

검증 그룹 를 작동합니다. 그래서 최종 솔루션은 다음과 같이 SearchRequest에 클래스의 모든 필드 주장에 (그룹의 이름은 임의) groups={"search_request"} 제약 옵션을 추가하는 것입니다

/** 
* @Assert\NotBlank(groups={"search_request"}) 
*/ 
private $articlePattern; 

그 방법은, 검증들이 가정 (연관된 객체로 내려하지 않습니다 속하지 않음 -이 경우 "search_request"그룹).

+0

필드를'disabled' 또는'readonly'로 설정하는 것은 어떻습니까? – jere

답변

4

1)이 필드를 비활성화하려면 클래스 형식으로 사용하지 마십시오!

public function buildForm(FormBuilder $builder, array $options) 
{ 
     $builder 
      ->add('content') 
      ->add('username') 
      //->add('yourEntity') 
     ; 
} 

2) 또는 더 나은, validation groups를 사용 (및 템플릿에서 제거).

/** 
* @ORM\ManyToOne(targetEntity="ArticlePattern") 
* @ORM\JoinColumn(name="article_pattern_id", onDelete="CASCADE") 
* @Assert\NotBlank(
* groups={"without_article_pattern_ckecking"} 
*) 
*/ 
private $articlePattern; 
이 이

양식은 참조 유효성 검사기 유효성을 검사합니다 : 당신의 Entity 클래스에서

public function getDefaultOptions(array $options) 
{ 
     return array(
      'data_class' => 'Sybio\BuzzBundle\Entity\SearchRequest', 
      'csrf_protection' => true, 
      'csrf_field_name' => '_token', 
      'intention'  => '865c0c0b4ab0e063e5caa3387c1a8741', 
      'validation_groups' => array('without_article_pattern_ckecking'), 
     ); 
} 

: 당신은 당신의 검증 엔티티를 호출 한 다음 수업 형태로이 그룹을 사용하지 않는 validation_group를 만들 to_article_pattern_ckecking 그룹에 추가합니다. 따라서이 유효성 검사 그룹이없는 경우 ArticlePattern 엔터티 내부의 유효성 검사기를 테스트하면 안됩니다.

이 정보가 도움이 되었기를 바랍니다.

+0

필자가 작성한 것처럼이 필드를 양식에 포함 시키므로 validation_groups가 답이 될 수 있습니다. 나는 그것을 점검 할것이다. – JohnM2

+0

나는 그것을 고발하지 않는다. 나는 내 질문에 코드와 몇 가지 설명을 포함시켰다. – JohnM2

+0

일반적으로이 작업을 수행하여 /** * @ORM \ ManyToOne (targetEntity = "ArticlePattern") * @ORM \ JoinColumn (= "article_pattern_id"이름, onDelete = "CASCADE") * @Assert \ NotBlank ( * groups = { "without_article_pattern_ckecking"} *) */ private $ articlePattern; 폼 클래스에서 : 그들은이없는 경우에 그것이 당신의 ArticlePattern 엔티티 내부 검증을 테스트해서는 안 'validation_groups'=> 배열 ('without_article_pattern_ckecking')는, 귀하의 양식은, without_article_pattern_ckecking 그룹을 참조 유효성 검사기 유효성을 검사합니다 이 검증 그룹 : o! – Sybio