Symfony2:从PRE_SET_DATA事件获取发布数据

时间:2015-03-04 13:54:31

标签: forms symfony events

我有一个带有绑定选择的表单,i.a。改变选择1可以更新选择2,其可以更新选择3等等。

为了给我的选择提供正确的“选择”(只有少数应该在加载时显示,另一个在更改选择后显示。在POST后,还应该设置正确的选项),我设置一个事件监听器在PRE_SET_DATA事件上。

在这个听众中,我有:

$updatetodate_object = $event->getData();
$form = $event->getForm();

问题是我的$ updatetodate_object不是最新的,在POST之后仍有来自DB的值而不是用户的数据,而我需要更新的值来构建“选择”。

我也尝试过:

$form->getData()

给我一​​个例外:

A cycle was detected. Listeners to the PRE_SET_DATA event must not call setData(). 
You should call setData() on the FormEvent object instead. 

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

根据http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms

预期的行为
  

但是,当您处理表单提交时,事情变得更加困难。这是因为PRE_SET_DATA事件告诉我们您开始使用的数据(例如空的SportMeetup对象),而不是提交的数据。

你应该尝试另一个活动。 PRE_SUBMIT是您可以获取提交数据的第一步。

http://symfony.com/doc/current/components/form/form_events.html#submitting-a-form-formevents-pre-submit-formevents-submit-and-formevents-post-submit

答案 1 :(得分:0)

最后我使用了PRE_SUBMIT事件。它给了我一个值数组而不是形成的对象,但它没关系。奇怪的是,使用SUBMIT事件,它返回一个对象,但子表单在主对象之前返回,这对我来说很烦人。