我有一個實體的Symfony窗體自定義類型。Symfony窗體:自定義名爲
我想定製在提交表單時執行的代碼,但僅限於一個字段。
例如,Symfony的會默認調用此:
$entity->setFoo($value);
我想要做的調用,而不是像這樣:
$entity->doSomething($value, true);
我如何能做到這一點,而不會影響所有其他屬性是正確的與表格映射?
我有一個實體的Symfony窗體自定義類型。Symfony窗體:自定義名爲
我想定製在提交表單時執行的代碼,但僅限於一個字段。
例如,Symfony的會默認調用此:
$entity->setFoo($value);
我想要做的調用,而不是像這樣:
$entity->doSomething($value, true);
我如何能做到這一點,而不會影響所有其他屬性是正確的與表格映射?
您可以在表單定義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)
。
謝謝,這是現貨! –
偉大的解決方法,但實體驗證,也許一些其他的東西不會工作了。 – Leto
檢查this後關於DataMapper(它從解釋值對象開始,但鏈接將直接滾動到Data Mappers
標頭)。這是非常有用的,但在Symfony文檔中錯過了。
Symfony調用$ entity-> set {$ someThing)= $ someThing,不是嗎? –