![](/img/trans.png)
[英]Custom choices list of sonata_type_model field with Sonata Admin
[英]Dynamically change content of sonata_type_model field
我使用Sonata管理捆綁包,並在頁面上的某些字段中鍵入sonata_type_model。
如何動態更改此字段中的元素列表? 我需要根據另一個字段中的值更改此字段的內容。
例如,在類型為sonata_type_model的字段中顯示了某物的所有類別。 在頁面的另一個字段中,我可以選擇性別(M或F)。 如果選擇了性別值,如何自動更改類別的字段內容? 在此示例中,對於具有類別應用類型的字段,sonata_type_model類型很重要,因為此類型允許選擇現有類別並輸入新類別。
您應該使用表單事件來處理表單的動態生成
樣品
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);
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.