EasyAdmin中CollectionField的动态表单修改



目的

我想创建一个基于EasyAdmin4的简单CMS,用户可以在其中构建由不同内容类型组成的文章,例如wysiwygs、库、引文和其他内容。它有点工作,但缺乏动态(ajax(方法

当前代码

我正在使用这种方法构建我的FormType。为了简单起见,只有两种类型的内容-wysiwyg和水平线。

在CRUD控制器中,有这样一个:

public function configureFields(string $pageName): iterable
{
return [
TextField::new('title'),
CollectionField::new('content')
->setEntryType(ArticleContentType::class),
];
}

在ArticleContentType中,有这样一个:

public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('type', ChoiceType::class, [
'choices' => [
'WYSIWYG Editor' => 'wysiwyg',
'Horizontal line' => 'horizontal_line',
],
])
;
$formModifier = function (FormInterface $form, $data = null) {
if (is_array($data) && $data['type'] === 'wysiwyg') {
$form->add('wysiwyg', TextareaType::class);
}
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
$data = $event->getData();
$formModifier($event->getForm(), $data);
}
);
$builder->get('type')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$type = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $type);
}
);
}

问题

上面的解决方案有效,但只有在保存一篇文章之后(当我选择所见即所得编辑器选项时,它会显示wysiwyg(。现在,我需要使用一些JavaScript来添加wysiwyg,而无需保存/刷新文章。我试过(在提到的文档中(这样的东西:

fetch(document.getElementById('new-Article-form').action, {
method: "POST",
body: new FormData(document.getElementById('new-Article-form')),
}).then((r) => r.text())

但它在EasyAdmins的AbstractCrudController(未定义的数组密钥"ea"(中失败。

有人做到了吗?有人能给我指正确的方向吗?

谢谢。

这已经很长时间了,也许这个答案不再相关,但我还是会把它留在这里。

您使用了错误的事件POstrongUBMIT

PRE_SUBMIT需要

最新更新