AdminBundle\Form\CoreForm.php:
class CoreForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
/**
Ajax Call : onSubmitAdd
*/
$builder->add('set_core_doctrine_metadata_type', ChoiceType::class, array(
'label' => 'Doctrine Metadata Cache Driver',
'choices' => $this->getDoctrineAccelerator(),
'empty_data' => 'array',
'choice_translation_domain' => false,
'attr' => array(
'onSubmitAdd' => 'set_core_doctrine_metadata_host|set_core_doctrine_metadata_port'
)
))
/**
Ajax Response : onSubmitAdd
*/
$doctrineModify = function (FormInterface $form){
$metaDataDriver = $form->get('set_core_doctrine_metadata_type')->getData();
if (!$form->isValid()) {
if ($metaDataDriver == 'memcache' || $metaDataDriver == 'memcached'){
$form->add('set_core_doctrine_metadata_host', TextType::class, array(
'label' => 'Doctrine Metadata Cache Host',
))
->add('set_core_doctrine_metadata_port', IntegerType::class, array(
'label' => 'Doctrine Metadata Cache Port',
));
}
}
};
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) use ($doctrineModify){
$form = $event->getForm();
$doctrineModify($form);
});
}
}
フォームの種類: スムーズに機能するフォーム。ただし、新しいフィールドは許可されません。
jQuery Ajax コード:
$(document).on('change', '[onSubmitAdd]', function () {
// Get Form
form = $(this).closest('form');
// Send Data
var data = {};
data[$(this).attr('name')] = $(this).val();
// Html Block
formGroup = $(this).closest('.form-group');
getFormGroup = $(this).attr('onSubmitAdd');
getFormGroup = getFormGroup.split('|');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: data,
success: function (data) {
addContent = "";
// Get Items
$.each(getFormGroup, function (index, item) {
dt = $(data.content.body).find('.' + item).html();
if (typeof dt != 'undefined'){
addContent = addContent + '<div class="form-group">'+ dt +'</div>';
}
});
// Replace or Add
if (formGroup.next().hasClass('onSubmitAdded')){
formGroup.next().html(addContent);
} else {
formGroup.after('<div class="onSubmitAdded">'+ addContent +'</div>');
}
}
});
});
問題: Ajax システムは問題なく動作しています。しかし、フォームが送信されると、「このフォームには余分なフィールドを含めないでください」というエラーコードが表示されます