对于此示例,我们假设我有Vehicle
个实体,其中包含以下值:
Type
:自行车,摩托车,汽车Fuel
:integer
我通过动态表单创建一个新的Vehicle对象。请注意,该字段"燃料"如果字段type
设置为" Bicycle"。
我可以成功创建此表单,这要归功于Symfony文档作为一些javascript:
<?php
$formModifier = function (FormInterface $form, $fields = null, array $options) {
foreach ($fields as $field_id => $field_value) {
if ($field_id == 'type') {
if ($field_value && $field_value == 'bicycle') {
$form->remove('gas');
} elseif ($field_value && $field_value == 'motorbike') {
$form->add('gas');
} elseif ($field_value && $field_value == 'car') {
$form->add('gas');
}
}
}
};
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier, $options) {
$formModifier($event->getForm(), $event->getData(), $options);
}
);
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier, $options) {
$vehicule = $event->getData();
$formModifier($event->getForm(), array(
'type' => $vehicule->getType(),
), $options);
}
);
$builder->add('type', ChoiceType::class, array(
'choices' => array(
'Bicycle' => 'Bicycle',
'Motorbike' => 'Motorbike',
'Car' => 'Car',
),
));
然后使用Doctrine保存数据。
但是,如果数据库中的实体已经定义了气体,则在编辑此表单时会出现问题。
例如:
Motorbike
gas = 10
。Type
已更新,现在值为Bicycle
。 但不是属于Gas
的属性10
。 在这种情况下,如何将gas属性设置为零?
答案 0 :(得分:0)
添加SUBMIT表单事件:
$builder->addEventListener(FormEvents::SUBMIT, function(FormEvent $event){
$data = $event->getData();
if($data['type'] == 'Bicycle'){
$data['gas'] = 0; //Note that in your entity, this field is named 'fuel'...
}
$event->setData($data);
});