目的
我想创建一个基于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需要