Quiero crear un CMS simple basado en EasyAdmin 4, donde un usuario pueda crear artículos hechos de diferentes tipos de contenido, algunos wysiwygs, galerías, citas y otros. Funciona, pero carece de un enfoque dinámico (ajax) para ello.
Estoy construyendo mi FormType usando este enfoque . Para simplificar, solo hay 2 tipos de contenido: wysiwyg y línea horizontal.
En el controlador CRUD, hay esto:
public function configureFields(string $pageName): iterable { return [ TextField::new('title'), CollectionField::new('content') ->setEntryType(ArticleContentType::class), ]; }Y en ArticleContentType, hay esto:
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); } ); }La solución anterior funciona, pero solo después de guardar un artículo (muestra wysiwyg cuando selecciono una opción de Editor WYSIWYG). Ahora necesito usar JavaScript para agregar el wysiwyg sin guardar/actualizar el artículo. Intenté (como en la documentación mencionada) algo como esto:
fetch(document.getElementById('new-Article-form').action, { method: "POST", body: new FormData(document.getElementById('new-Article-form')), }).then((r) => r.text())pero falla en AbstractCrudController de EasyAdmins (clave de matriz no definida "ea").
¿Hay alguien que haya logrado hacer esto? ¿Puede alguien señalarme en la dirección correcta?
Gracias.