2014-02-27 46 views
5
的設置程序

我有一個實體的Symfony窗​​體自定義類型。Symfony窗​​體:自定義名爲

我想定製在提交表單時執行的代碼,但僅限於一個字段。

例如,Symfony的會默認調用此:

$entity->setFoo($value); 

我想要做的調用,而不是像這樣:

$entity->doSomething($value, true); 

我如何能做到這一點,而不會影響所有其他屬性是正確的與表格映射?

+0

Symfony調用$ entity-> set {$ someThing)= $ someThing,不是嗎? –

回答

9

您可以在表單定義foo場爲not mapped,然後在POST_SUBMIT添加監聽器,將調用您的doSomething()方法:

$builder->add('foo', null, array('mapped' => false)) 
    ; 

    $builder->addEventListener(
     FormEvents::POST_SUBMIT, 
     function(FormEvent $event) { 
      $entity = $event->getForm()->getData(); 
      $entity->doSomething($event->getForm()->get('foo')->getData(), true); 
     } 
    ); 

它不會叫$entity->setFoo($value)。相反,它會根據您的意願調用$entity->doSomething($value, true)

+0

謝謝,這是現貨! –

+1

偉大的解決方法,但實體驗證,也許一些其他的東西不會工作了。 – Leto

1

檢查this後關於DataMapper(它從解釋值對象開始,但鏈接將直接滾動到Data Mappers標頭)。這是非常有用的,但在Symfony文檔中錯過了。