您應該使用表單事件來處理表單
Dynamic Generation for Submitted Forms
樣品
功能的動態生成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);
}
);