簡體   English   中英

動態更改sonata_type_model字段的內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM