我正在尝试使用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?
有任何帮助吗? 提前谢谢。
答案 0 :(得分:0)
我有很多与此有关的问题,但我认为我提出了一个切实可行的解决方法。希望这能节省一些时间。
我的情况是:我有多个Company
个实体,其1
到n
ContactPerson
个实体。当我创建新的Job
时,我必须选择Company
,然后我想过滤所选公司的ContactPerson
列表。正如你所看到的,它的工作原理。如果加载了Company
,则取决于所选的ContactPerson
匹配列表:
为了让这个工作正常,我只是禁用了mapping
和Customer
的{{1}}标记,以便我自己在我的ContactPerson
和postPersist
中映射数据admin class(extends postUpdate
)。
然后我为BaseAdmin
所有实体使用sonata_type_choice_field_mask
。我自己构建了一个数据阵列。之后,我使用类型Company
添加预过滤(通过匹配过滤器)ContactPerson
下拉列表。
这项工作非常顺利 - 当然,如果您有数千家公司和客户,它将失败。在我的情况下,这不会发生,所以这是一个切实可行的解决方案。
代码(删除不必要的东西):
sonata_type_model