以Symfony4形式将Entity对象的值传递给嵌套的CollectionTypes

时间:2018-12-16 12:22:37

标签: forms e-commerce symfony4 many-to-one

概述:在VariantGroup Products中搜索VariantSets,我需要在下拉列表中创建一个包含VariantGroups Variants的下拉列表Symfony形式

详细信息: 我有一个Product实体,它与多个ManyToMany对象具有VariantSet关系。 VariantSet对象包含多个VariantGroup对象,每个对象都需要生成一个下拉菜单以显示其Variant选择。

对于嵌套的CollectionTypes,我只需要使与父CollectionType相关的选项可访问。

因此,唯一可用的Variants应该与VariantGroups相关,而只有与初始解析的VariantSets相关的可用Product相关。 / p>

有一些信息指向使用查询生成器仅获取相关项,但是我想知道这是否是最佳实践。另外-如何传递先前的表单(因此,Product位于嵌套的CollectionType中,VariantGroup位于这两个嵌套的VariantSets中)。

使用Symfony形式的最佳实践甚至有可能实现这一目标吗?

所需输出here

的示例

1 个答案:

答案 0 :(得分:0)

是的。答案是嵌套的CollectionType表单和最终形式的自定义查询生成器(由于某种原因,它正在调用数据库中的所有Variant对象,而不是使用与解析的{{ 1}}对象:

主要产品形式

VariantGroup

呈现产品变型集: (以获取与主要产品class ComplexProductType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { // Render the variant sets based on the parsed product $builder ->add('variantSets', CollectionType::class, [ 'entry_type' => VariantSetComplexProductType::class, 'label'=> false, 'by_reference' => true, ] ); ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( "data_class" => Product::class, )); } } 对象相关联的正确VariantGroups

VarianSet

使用下拉列表中的class VariantSetComplexProductType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { // Render the groups based on the Variant sets $builder ->add( 'label' ) ->add( 'variantGroups', CollectionType::class, [ 'entry_type' => VariantGroupComplexProductType::class, 'label'=> false, 'by_reference' => true ] ) ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults( [ 'data_class' => VariantSet::class, ] ) ; } } 渲染变体集VariantGroups

Variants对象的下拉需要使用Variant选项在FromEvent中完成,否则我会遇到一个问题,即所有query_builder对象都在在数据库中调用。

需要进行检查以确保仅基于解析的Variant调用了正确的Variant对象。

VariantGroup