我有a collection of forms像在下面的代码,这导致了如下所示(具有两个例子的条目)的一种形式:
当点击提交,数据I到的形式提供(助洗剂)实例相应的更新。
问题:我的问题是,该列表可能会很长,所以我需要了解哪些情况下已被更新的方式。
我想过存储原始数据的克隆(这里$leadPartnerList
在我的会议。但是,这感觉不对。
是否symfony中(具体表单生成器)提供这样的功能开箱?或者,这将是一个有效的解决方案,以了解在表单中的哪些字段已被更新,并且不?
我的嫩枝:
{% block content %}
<div>
{{ form_start(form) }}
{% for partner in lead_partners %}
{{ form_row(partner.name) }}
{% endfor %}
{{ form_end(form) }}
</div>
{% endblock content %}
我的控制器代码:
public function overview(Request $request, \App\Utility\LeadPartnerLoader $LeadPartnerLoader)
{
$leadPartnerList = $leadPartnerLoader->loadAll();
$formBuilderData = [
'lead_partners' => $leadPartnerList
];
$listForm = $formFactory->createNamedBuilder('listForm', FormType::class, $formBuilderData)
->add('lead_partners', CollectionType::class, [
'entry_type' => LeadPartnerFormType::class,
'allow_add' => true
])
->add('submit', SubmitType::class, [
'label' => 'Submit Changes'
])
->getForm();
... handleRequest and so on and so forth...
}
而表单类型(LeadPartnerFormType):
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => LeadPartner::class,
));
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class);
}
$leadPartnerList
是与阵列中的每个条目内LeadPartner实例类型array
的。
请注意:我不是在这里使用原则!
使用symfony的事件监听或EventSubscriber。请参阅:https://symfony.com/doc/current/doctrine/event_listeners_subscribers.html