2016-07-01 2 views
10

나는 심포니 엔티티 양식이 있습니다 Symfony : Type/Form에서 null을 반환 할 수 있습니까?

class MyType extends AbstractType 
{ 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     ... 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'LogicielBundle\Entity\FichierGroup', 
      'intention' => $this->getName() . '_token' 
     )); 
    } 

그러나 POST_SUBMIT 이벤트

, 나는 널 (엔터티)를 반환하지 싶다. 나는이 테스트 있지만 작동하지 않는 : 당신이 나를

$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) { 
     .... my condition ... 
     $event->setData(null); 
    }); 

도와 드릴까요? 감사합니다 :)

+2

왜 null을 반환 하시겠습니까? 해결 방법은 무엇입니까? –

+1

양식이 객체에 매핑되고 제출되고 바인드 된 경우 왜 그 객체에서 null을 가져 오려고합니까? – goto

+0

잘못된 것이 있으면 예외를 throw 할 수 있지만 null을 throw 할 수는 없습니다. 유효성 검사를 위해 Asserts를 사용할 수 있습니다. 정말로, 해결 방법은 무엇입니까? –

답변

0

제게 당신은 제출 양식을 변경할 수 없습니다.

(제가 틀릴 수도있다) 그러나 당신이 양식을 재설정하려면 후에는 컨트롤러에서 작업을 수행 할 수 있습니다, 제출 : 예를 들어

: 물론

public function fooAction() 
{ 
    ... 
    $form = $this->getEntityForm($entity); 

    ... 
    $form->handleRequest($request); 
    if ($form->isSubmitted()) { 
     // Do something 
     ... 
     // Reset your form with null as entity 
     $form = $this->getEntityForm(null);    
    } 

    ... 
    return $this->render(
     'yourfootwig.html.twig', 
     [ 
     'form' => $form->createView(), 
     ... 
     ] 
    ); 
} 

protected function getEntityForm($entity = null) 
{ 
    return $this->createForm(
     'Foo:MyType', 
     $entity, 
     [...]); 
} 

, 당신은 그것을 적응해야 자신의 코드.

0

사실 양식 엔터티에 전달 된 데이터를 변경하려는 경우 이벤트는 FormEvents::PRE_SUBMIT에서 수신 대기해야합니다. As described in the official doc.

+0

PRE_SUBMIT에서 양식이 작성 될 요청의 데이터를 mdify하십시오. 그런 다음 양식에있는 입력란으로 제한되며 여기에서 양식을 "무효화"할 수 없습니다. – romaricdrigon

1

컨트롤러 코드를 올리시겠습니까? createForm에 개체 참조를 전달 했습니까, 아니면 $form->getData()을 사용합니까? 당신의 경우에, 당신은 두 번째에 충실해야합니다.

POST_SUBMIT 대신 SUBMIT 이벤트를 사용해보십시오. 심포니 (Symfony) 박사는 "데이터의 정규화 된 표현에서 데이터를 변경하는 데 사용할 수 있습니다."