我使用Sonata管理包并在页面上的某个字段输入sonata_type_model。
如何动态更改此字段中的元素列表?我需要根据另一个字段中的值更改此字段的内容。
例如,在类型为sonata_type_model的字段中显示了所有类别的东西。在页面上的另一个字段中,我可以选择性别(M或F)。如果选择性别值,我如何自动更改带有类别的字段内容? 在此示例中,对于具有类别应用类型的字段,sonata_type_model非常重要,因为此类型允许选择现有类别并输入新类别。答案 0 :(得分:0)
您应该使用表单事件来处理表单的动态生成
Dynamic Generation for Submitted Forms
<强>示例强>
Admin类中的 configureFormFields
$formBuilder = $formMapper->getFormBuilder();
$currentUser = $this->getConfigurationPool()->getContainer()->get('security.token_storage');
$formMapper->add('driverCompany',null,array('class' =>'XXXXXBundle:Company'));
$formModifier = function (FormInterface $form, Company $oCompany = null, $defaultCompany) {
$company = null === $oCompany ? $defaultCompany : $oCompany;
$form->add(
'zones',
null,
array(
'class' => 'XXXXXXBundle:Zone',
'label' => 'Zones',
'multiple' => true,
'required' => false,
'placeholder' => '',
'query_builder' => function (ZoneRepository $zr) use ($company) {
return $zr
->createQueryBuilder('z')
->where('z.companyZone = ?1')
->setParameter(1, $company);
},
)
);
};
$formBuilder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier, $defaultCompany) {
$data = $event->getData();
if ($data !== null) {
if ($data->getDriverCompany() === null) {
$oCompany = null;
} else {
$oCompany = $data->getDriverCompany();
}
$formModifier($event->getForm(), $oCompany, $defaultCompany);
}
}
);
$formBuilder->get('driverCompany')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier, $defaultCompany) {
$oCompany = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $oCompany, $defaultCompany);
}
);