2012-02-14 4 views
1

제출 된 데이터에 따라 양식 유효성 검사를 구현해야합니다. 데이터 객체의 invoice 속성이 true 인 경우 validation_groups 배열에는 '추가'유효성 검사뿐만 아니라 'company'도 포함되어야합니다.Symfony2의 동적 유효성 검사 그룹

Symfony 문서 https://github.com/symfony/symfony-docs/blob/master/book/forms.rst에서 "제출 된 데이터를 기반으로 한 그룹"장을 발견했습니다.

Warning: Illegal offset type in /var/www/vendor/symfony/src/Symfony/Component/Validator/GraphWalker.php line 101 500 Internal Server Error - ErrorException

어떤 아이디어 것은 무엇을 잘못 될 수 있습니다

public function getDefaultOptions(array $options) 
{ 
    return array(
     'data_class' => 'Strict\PublicBundle\Entity\Booking', 
     'validation_groups' => function(FormInterface $form) 
     { 
       return array('booking'); 
     }, 
    ); 
} 

이 오류가 발생합니다 :

문제가 있다는 것입니다?

답변

3

에 따르면 validation_groups에 대한 콜백을 사용하면 Symfony 2.1 (아직 출시되지 않음, 현재 master 분기)에 표시됩니다.

마스터 분기를 사용 하시겠습니까? 현재 stable (2.0.x)을 사용하는 경우 제출 된 데이터을 기반으로하는 그룹을 지원하지 않으므로 배열 만 사용해야합니다. http://symfony.com/doc/current/book/forms.html#book-forms-validation-groups에 대한 적절한 설명서를 참조하십시오.

2

대안이 있습니다. 양식을 바인딩하기 전에 조건을 확인할 수있는 경우 양식을 만들 때 유효성 검사 그룹의 기본 목록을 재정의 할 수 있습니다.

제 경우에는 여러 개의 양식 페이지에서 업데이트되는 세션의 주문 개체가 있습니다. 주문은 "배달"또는 "픽업"을 할 수 있습니다 전달이 나는이 화면에 주소 정보의 유효성을 검사 할 필요가 이전 화면에서 선택한 경우 :

if ($order->getOrderType() == "Delivery") 
    { 
     $validationGroups = array('step3', 'delivery'); 
    } 
    else 
    { 
     $validationGroups = array('step3'); 
    } 

    $formType = new Form\Order3Type(); 
    $form = $this->createForm($formType, $order, array("validation_groups" => $validationGroups)); 
    $form->bindRequest($request); 

당신의 상태는 형태가 아니라 이미 세션의 경우, 당신은 항상 단지 요청 객체로부터 바로 값을 가져올 수 있습니다.

1
// MyFormType.php 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
     'data_class' => 'Strict\PublicBundle\Entity\Booking', 
     'validation_groups' => function (FormInterface $form) { 
      $data = $form->getData(); 

      $groups = ['booking']; 

      if ($data->invoice) { 
       $groups[] = 'company'; 
      } 

      return $groups; 
     }, 
    ]); 
} 
관련 문제