2017-09-24 1 views
0

임베디드 형태의 전부 또는 아무것도 유효성 검사 오류 표시 : Optional embed form in Symfony 2 : 나는 엔티티 전화에 내장 된 형태를 가지고있는 개체 사람에 대한 양식을 가지고심포니 3 : 내가 여기에 설명 된대로 정확히 같은 문제가

. 사용자는 의 모든 필드를 비워 둘 수 있습니다. 전화은 비어 있으며 양식이 유효합니다. 그러나 단일 필드가으로 채워진 경우 모두 전화 -fields가 유효해야합니다. 내 첫 번째 방법 중

, 나는 단순히 @Assert\NotNull()없이 @Assert\Valid()과 사람 전화 속성을 주석. 새로운 사람을 입력 할 때만 문제가 없습니다. 기존 사람을 편집 할 때 전화 속성이 이미 입력되어 있으면 전화 필드 (유효해야 함)를 모두 삭제해도 유효한 제출이되지 않습니다.

검증 콜백 기능 this solution의 검증 심포니 3에 대한 일부 수정과 함께 작동합니다

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->inContext($context)->validate($this->phone); 
    } 
} 

그러나 양식을 제출 한 후

는 전화 필드에 대한 유효성 검사 오류 페이지에 표시되지 않습니다. 디버그 툴바에서만 볼 수 있습니다.

어쩌면 양식 제출 후 오류가 표시되도록하려면이 솔루션을 어떻게 수정해야합니까?

하지만 재산 전화 null로 기존 사람 개체의을 설정 어떻게 든 가능하다면 어쩌면 내 첫 번째 방법은, 작동 할 수 있습니다, 전화의 모든 양식 필드가 삭제 된 경우?

답변

0

->add('phone', 'collection', array(
      'type' => 'text', 
      'allow_add' => true, 
      'error_bubbling' => false, 
      'cascade_validation' => true, 
     )); 
0

답을 찾을 수 귀하의 formType 클래스에 cascade_validation (be carefull removed from symfony3)와 error_bubbling를 사용하여 자신을 시도 :

내가 위해 만든 other post에서 솔루션의 수정을하게하려고 Symfony 3.3의 작업은 다르게해야합니다 :

/** 
* 
* @Assert\Callback() 
*/ 
public function validatePhone(ExecutionContextInterface $context) 
{ 
    if (/* Fields are not empty */) 
    { 
     $context->getValidator()->validate($this->phone); 
    } 
} 
관련 문제