предоставить встроенную форму symfony 4 - PullRequest
0 голосов
/ 09 февраля 2020

Я использую CollectionType для встроенной формы. Когда я отправляю формы, все данные сохраняются, и у меня нет проблем.

Но ... Я не могу редактировать существующие данные, потому что родительская форма не предоставлена. Обычно у меня есть 1 форма для 1 строки в моей базе данных, но в этом случае у меня есть 3 строки и 0 editform в моем представлении.

<?php

namespace App\Form;

use App\Entity\BlockImage;
use App\Entity\ParentBlockImage;
use App\Repository\BlockImageRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;


class ParentBlockImageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id_category', HiddenType::class, [
                'empty_data' => 1
            ])
            ->add('block_image', CollectionType::class, [
                'entry_type' => BlockImageType::class,
                'entry_options' => [
                    'attr' => ['class' => 'block_image'],
                ],
                'prototype' => true,
                'allow_add' => true,
                'allow_delete' => true,
                'delete_empty' => true,
                'allow_file_upload' => true,
                'label' => false,
                'required' => false,
            ])
            ->add('save', SubmitType::class, ['label' => 'Enregister'])
        ;
    }
}

    <?php

namespace App\Form;

use App\Entity\BlockImage;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class BlockImageType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('titre', TextType::class, ['label' => '', 'attr' => ['placeholder'=> 'Titre']])
            ->add('subtitle', TextType::class, ['label' => '', 'attr' => ['placeholder'=> 'Sous-titre']] )
            ->add('imageFile', FileType::class, [
                'label' => '',
                'data_class' => null,
                'mapped' => true,
            ])
            ->add('orders', HiddenType::class)
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => BlockImage::class,
        ]);
    }
}

 /**
     * @Route("/admin/index", name="admin_block_image_index", methods={"GET", "POST"})
     */
    public function adminIndex(Request $request, BlockImageRepository $blockImageRepository): Response
    {
        $form = $this->createForm(ParentBlockImageType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()){
            $entityManager = $this->getDoctrine()->getManager();
            $data = $form->getData();

            foreach($data['block_image'] as $blockImage){
                $blockImage->setUpdatedAt(new \DateTime());
                $entityManager->persist($blockImage);
                $entityManager->flush();
            }

            return $this->redirectToRoute('admin_block_image_index');
        }

        return $this->render('block_image/admin_index.html.twig', [
            'form' => $form->createView(),
        ]);
    }


<section class="col-10">
            <h1 class="text-center">Blocs images de la page d'accueil</h1>
            {{ form_start(form) }}
            <div class="tags row active-with-click container mt-5" id="all-blocks"
                data-prototype="{{ form_widget(form.block_image.vars.prototype)|e }}"
                 data-widget-tags="{{ '<div class="block_image col-md-4 col-sm-6 col-xs-12"></div>'|e }}"
                data-widget-counter="{{ form.children|length }}">
                {% for block_image in form.block_image %}
                    {{ form_row(block_image) }}
                {% endfor %}

            </div>


            {{ form_end(form) }}
        </section>

Я даю вам, родительский класс формы, класс формы, контроллер, используя родительский Форма и вид

...