SonataAdmin捆绑链接字段(级联选择)

时间:2014-11-28 16:47:12

标签: symfony sonata-admin

我正在尝试使用sonata admin bundle创建链接下拉列表。

产品

product_categories (产品多对多)

product_features (与product_categories相关联)(基数:产品多对多,类别多对一,即类别可以有多个功能,但功能与一个类别相关联)

一切正常,一个多选启用的组合(用于类别)字段和另一组复选框(用于product_features)字段正在使用此

显示

在产品登记表中:

  protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper            
    ->add('category', 'sonata_type_model', array('required' => false, 'expanded' => false, 'multiple' => true, 'label' => 'Choose your categories'))
   ->add('features', 'sonata_type_model', array('required' => false, 'expanded' => true, 'multiple' => true, 'label' => 'Choose Features'))

但我想要的是当我在第一个组合中选择值即类别时,第二个复选框列表即功能应相应地动态加载(仅与该类别相关联的功能)

由于第一个选择框是多选启用,所以第二个列表是累积的更好,即当选择类别1时显示与category1相关的功能 然后,当选择类别2(同时选择1)时,它会显示与cat 1和cat 2

相关联的功能

我该怎么做?

我一直在googing,我发现只有这个2岁的解决方案,这似乎很长很老。还有其他解决方案吗?在过去的两年里,由于在那段时间内发布了几个版本的奏鸣曲管理员,事情发生了变化。

How to use Ajax within Sonata Admin forms?

有任何帮助吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我有很多与此有关的问题,但我认为我提出了一个切实可行的解决方法。希望这能节省一些时间。

我的情况是:我有多个Company个实体,其1n ContactPerson个实体。当我创建新的Job时,我必须选择Company,然后我想过滤所选公司的ContactPerson列表。正如你所看到的,它的工作原理。如果加载了Company,则取决于所选的ContactPerson匹配列表:

Filter screenshot 1 Filter screenshot 2

为了让这个工作正常,我只是禁用了mappingCustomer的{​​{1}}标记,以便我自己在我的ContactPersonpostPersist中映射数据admin class(extends postUpdate)。

然后我为BaseAdmin所有实体使用sonata_type_choice_field_mask。我自己构建了一个数据阵列。之后,我使用类型Company添加预过滤(通过匹配过滤器)ContactPerson下拉列表。

这项工作非常顺利 - 当然,如果您有数千家公司和客户,它将失败。在我的情况下,这不会发生,所以这是一个切实可行的解决方案。

代码(删除不必要的东西):

sonata_type_model