Symfony 4 формы VichImageType обновляет автозаполнение - PullRequest
0 голосов
/ 01 октября 2019

У меня есть форма Symfony для добавления продуктов в сущность Products. В этой форме у меня есть поле VichImageType для загрузки изображения продукта. Это все работает нормально, но когда я иду, чтобы обновить продукт, используя то же самое для поля VichImageType не заполнено, хотя само изображение присутствует и метка удаления.

Я надеялся, что кто-то может мне помочьзаполнить это поле автоматически, чтобы пользователю не приходилось добавлять изображение каждый раз при обновлении продукта.

Код моей формы выглядит следующим образом:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name')
        ->add('type', EntityType::class, array (
            'placeholder' => 'Select One...',
            'class' => 'App\Entity\Type',
            'attr' => [
               'class' => 'select-css',
            ],
        ))
        ->add('addTypes', TypeType::class, [
            'mapped' => false,
            'label' => 'Add types',
            'required' => false,
            'attr' => [
                'class' => 'addon',
            ],
            'label_attr' => [
                'class' => 'addon_label',
            ],
        ])
        ->add('manufacturer', EntityType::class, array (
            'placeholder' => 'Select one...',
            'class' => 'App\Entity\Manufacturer',
            'attr' => [
                'class' => 'select-css',
            ],
        ))
        ->add('addManufacturers', ManufacturerType::class, [
            'mapped' => false,
            'required' => false,
            'label' => 'Add manufacturers',
            'attr' => [
                'class' => 'addon',
            ],
            'label_attr' => [
                'class' => 'addon_label',
            ],

        ])
        ->add('colours', EntityType::class, [
            'class' => 'App\Entity\Colours',
            'multiple' => true,
            'expanded' => true,
        ])
        ->add('addColours', ColoursType::class, [
            'mapped' => false,
            'label' => 'Add colours',
            'required' => false,
            'attr' => [
                'class' => 'addon',
            ],
            'label_attr' => [
                'class' => 'addon_label',
            ],
        ])
        ->add('description', CKEditorType::class, array(
            'config_name' => 'new_config',
        ))
        ->add('MainImageFile', VichImageType::class)
        ->add('weight')
        ->add('needle_size')
        ->add('materials', TextType::class, [
            'label' => 'Composition',
            'required' => false,
        ])
        ->add('tension')
        ->add('stock')
        ->add('RRP', MoneyType::class, array(
            'label' => 'RRP',
            'divisor' => 1,
            'currency' => 'gbp',
        ))
        ->add('Price', MoneyType::class, array(
            'divisor' => 1,
            'currency' => 'gbp',
        ))
        ->add('display', CheckboxType::class, array(
            'label' => 'Display product?',
            'required' => false,
        ))
        ->add('Save', SubmitType::class, [
            'attr' => [
                'class' => 'button',
            ]
        ])
    ;
}

это из функции в моем контроллере:

public function edit($id, Request $request) {
    $this->data = $this->em
        ->getRepository(Products::class)
        ->findOneBy(['id' => $id]);

    if (!$this->data) {
        throw $this->createNotFoundException(
            'No product found for id: '.$id
        );
    }

    $this->title = "Edit Product: ".$this->data->__toString();


    $form = $this->createForm(ProductsType::class, $this->data);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        foreach($form['colours']->getData() as $colour)
            $this->data->addColour($colour);


        $this->em
            ->flush();


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

    return $this->render("form_view/index.html.twig", [
        'form' => $form->createView(),
        'title' => $this->title,
    ]);
}
...