我有一个案例,我们为体育赛事创建注册。
注册包含特定于每项运动的一些字段。其中一些将被类似命名,尽管它们对于每项运动都会有所不同。示例:“球场上最喜欢的位置”:
对于篮球,它将是以下之间的选择领域:
- 控球后卫
- 得分后卫
- ETC...
对于棒球,这将是相同的选择字段,但有一些不同的选择:
- 投手
- 内场
- 外场
- ...
首次创建表单(用于显示)时,运动作为注册数据的一部分传递:
$registration = new Registration;
$registration->setEvent($event);
并将$event->getSport();
为该赛事归还这项运动。
到目前为止一切顺利,并为我的表单生成添加了一个监听器,我只能设置特定于该运动的字段:
public static function getSubscribedEvents()
{
return [FormEvents::POST_SET_DATA => 'preSetData'];
}
/**
* @param event DataEvent
*/
public function preSetData(DataEvent $event)
{
$form = $event->getForm();
if (null === $event->getData()) {
return;
}
// (The get event here means the real life sports gathering)
$sport = $event->getData()->getEvent()->getSport();
/**
* Then I customize the fields depending on the current sport
*/
}
当用户提交此表单时,问题就出现了。在这种情况下,$event->getData()->getEvent()
是null
。
“事件”(现实生活中的一个)是document_id
注册表单中的一个字段(此处使用 MongoDB)。
如果我听::BIND
事件而不是::PRE_SET_DATA
,那么我可以访问所有内容,但是自定义表单已经太晚了,因为它已经绑定了。::PRE_BIND
做同样的事情::PRE_SET_DATA
。
如何在此处正确检索我的赛事和运动文件,以便自定义我的表格并适当地验证它?