поле изображения становится пустым при отправке формы редактирования - PullRequest
1 голос
/ 07 июня 2019

У меня есть сущность с тремя полями id, image, title.all не равны нулю в базе данных. Поле image для хранения пути к файлу. Когда я создаю новую запись, она работает нормально, изображение загружается в общую папку. Но при редактировании этогозапись изображения в поле становится нулевой, и это значение не должно быть пустым сообщением. Изображение поля не задано и всегда становится пустым при отправке формы.

я следую Symfony doc https://symfony.com/doc/current/controller/upload_file.html

поле сущности

/**
 * @ORM\Column(type="string", length=255)
 *
 */
private $image;

тип формы

public function buildForm(FormBuilderInterface $builder, array 
$options)
{

    $builder->add('title', TextType::class, [
        "label" => "Title"
    ])
        ->add('image', FileType::class, [
            'data_class' => null,
        ])
        ->add('save', SubmitType::class, array("label" => "Save"));

}

контроллер

public function editAction(Request $request, Gallery $gallery)
{
    $em = $this->getDoctrine()->getManager();
    $file = new File($this->getParameter('gallery_directory') . '/' . 
$gallery->getImage());
    $gallery->setImage($file);
    $form = $this->createForm(GalleryType::class, $gallery);
    $form->handleRequest($request);


    if ($form->isSubmitted() && $form->isValid()) {
        $file = $form->get('image')->getData();
        $fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension();

        // Move the file to the directory where brochures are stored
        try {
            $file->move(
                $this->getParameter('brochures_directory'),
                $fileName
            );
        } catch (FileException $e) {
        }
        $gallery->setImage($fileName);

        $em->persist($gallery);
        $em->flush();
    }

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

1 Ответ

0 голосов
/ 10 июня 2019

Мне не удалось получить пример для загрузки файла в https://symfony.com/doc/current/controller/upload_file.html для работы.Я изменил ваш код, чтобы он выглядел больше как какой-то код, который я получил для работы.Приведенный ниже код не был протестирован, но должен приблизить вас к работе.

поле сущности:

/**
 * @ORM\Column(type="string", length=255)
 *
 */
private $image;

// Note there is no type hint on the return value.
// Sometimes it is a string, sometimes a UploadedFile.
// php bin/console make:entity adds a type hint which must be removed.
public function getImage()
{
    return $this->image;
}

public function setImage($image): self
{
    $this->image = $image;
    return $this;
}

тип формы для создания сущности:

public function buildForm(FormBuilderInterface $builder, array 
$options)
{
    $builder->add('title', TextType::class, [
        "label" => "Title"
    ])
        ->add('image', FileType::class)
        ->add('save', SubmitType::class, array("label" => "Save"));
}

Форма GalleryEditTypeтип для редактирования объекта: (я не знаю, как создать комбинированную форму для создания / редактирования.)

public function buildForm(FormBuilderInterface $builder, array 
$options)
{
    $builder->add('title', TextType::class, [
        "label" => "Title"
    ])
        ->add('image', FileType::class, [
            'required' => false,
            'mapped' => false
        ])
        ->add('save', SubmitType::class, array("label" => "Save"));
}

контроллер: (я менее уверен в этом коде, но вам определенно нужна подсказка типа UploadedFileниже.)

public function editAction(Request $request, Gallery $gallery)
{
    $em = $this->getDoctrine()->getManager();

    $form = $this->createForm(GalleryEditType::class, $gallery);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        // $file stores the uploaded image file.
        /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */
        $file = $form->get('image')->getData();
        if ($file != null) {
            // The user selected a new image.
            $fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension();

            // Move the file to the directory where brochures are stored
            try {
                $file->move(
                    $this->getParameter('brochures_directory'),
                    $fileName
                );
            } catch (FileException $e) {
            }
            // Update the image property to store the image file name instead of its contents.
            $gallery->setImage($fileName);
        }
        $em->persist($gallery);
        $em->flush();

        return $this->redirectToRoute('gallery_index', [
            'id' => $gallery->getId(),
        ]);
    }

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

Пожалуйста, опубликуйте обновленный код, когда он заработает.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...