概述:在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
的示例答案 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