【发布时间】:2019-09-07 10:17:23
【问题描述】:
我有一个分几个阶段发生的表格,包括:
步骤 1:基于实体 1 的简单表格,记录数据集的第一部分。 步骤2:父表单(基于步骤1中的实体1),实现子表单(基于实体2)=> CollectionType。父表单 ($builder) 包含来自第 1 步的数据,但不包含子表单。
我的目标很简单:我的子表单包含一个 ChoiceType,它必须根据给定的不同而有所不同
我的问题:向子表单传递父表单具有的一条数据 ($builder->getData()) 为我的 ChoiceType 设置选项条件。
我寻找解决方案,但没有找到任何结果。所以我认为我的问题不是错误,而是我的错误方法。
我测试过:
//PARENT
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('wans', CollectionType::class,
[
'entry_type' => WanDType::class,
'entry_options' => [
'label' => false,
'data' => $builder->getData() // <- here
],
]);
}
//ENFANT
public function buildForm(FormBuilderInterface $builder, array $options)
{
$ma_valeur = $builder->getData()->getValue(); //<- here
if(in_array($ma_valeur, ['1'])) { //<- here
$builder->add('profil', ChoiceType::class, [
'choices' => [
[...]
],
'label' => false,
]);
} else { //<- here
$builder->add('profil', ChoiceType::class, [
'choices' => [
[...]
],
'label' => false,
]);
} //<- here
}
=> 我收到一条错误消息,说明我的 data_class 与我的子表单不匹配。实际上,父窗体的data_class已经替换了子窗体的数据。该错误建议给它 null 值,但它会导致其他错误,并且 symfony 越来越不高兴(合乎逻辑,在我看来不是一个好的做法)。
=> 我尝试使用 $options。 Symfony 很不高兴,因为他拒绝添加他在源头不知道的条目 key=>values。
=> 我想过在父表单中创建我的条件。但是条件会随着时间的推移而变化,因此在我看来,按条件类型创建子表单并不是一个好习惯。
=> 我也想过直接在视图中创建这个字段。但根据进化,这也不是最优的。
=> 我测试了几个在这里没用的东西,每次都是阴性结果。
我强烈怀疑 SensioLabs 没有想到这种事情。应该不用走太远,如果有人知道怎么解释就好了。
感谢您的帮助:)
================================================ =====
编辑测试 1
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
dump($event->getForm()->getParent()->getData());
die('ok');
});
die('ok2');
}
【问题讨论】:
标签: forms symfony conditional-statements entity-relationship