Загрузка файла Symfony 3 в форме редактирования

у меня есть сущность "Cours" с полем "image" .
это конструктор CoursType.php

$builder
        ->add('titre')
        ->add('image', FileType::class, array('data_class' => null, 'label'=>false,'required'=>false))                                                                                       
        ->add('videoIntro')
            );

Проблема заключается в «форме редактирования», когда я отправляю эту форму без загрузки нового изображения, в «изображение» будет передано нулевое значение.

это код контроллера editAction

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

    $deleteForm = $this->createDeleteForm($cour);


    $editForm = $this->createForm('LearnBundle\Form\CoursType', $cour);
    $editForm->handleRequest($request);

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

        $image=$cour->getImage();
        $imageName = md5(uniqid()).'.'.$image->guessExtension();
        $image->move($this->getParameter('images_directory'),$imageName);
        $cour->setImage($imageName);

        $em->flush();

        return $this->redirectToRoute('cours_edit', array('id' => $cour->getId()));
    }

    return $this->render('cours/edit.html.twig', array(
        'cour' => $cour,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),

    ));
}

Поэтому вам нужно проверить, действительно ли изображение установлено пользователем, перед обработкой, как если бы оно было отправлено.

RiggsFolly 13.05.2018 00:05

Не могли бы вы предложить мне несколько строк кода, потому что я пробовал десятки раз, но мне не удалось

Farouk Douglas 13.05.2018 00:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
1 350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Должно получиться примерно так:

public function editAction(Request $request, Cours $cour) {
    //fetch current img is exists
    $img=$cour->getImage();
    if ($img !== null) {
        $cour->setImage(new File($this->getParameter('images_directory').$img);
    }

    $em = $this->getDoctrine()->getManager();
    $deleteForm = $this->createDeleteForm($cour);
    $editForm = $this->createForm('LearnBundle\Form\CoursType', $cour);
    $editForm->handleRequest($request);

    if ($editForm->isSubmitted() && $editForm->isValid()) {
        //Check if new image was uploaded
        if ($cour->getImage() !== null) {
            //Type hint
            /** @var Symfony\Component\HttpFoundation\File\UploadedFile $newImage*/
            $newImage=$cour->getImage();
            $newImageName= md5(uniqid()).'.'.$file->guessExtension();
            $newImage->move($this->getParameter('images_directory'), $newImageName);
            $cour->setImage($newImageName);
        } else {
            //Restore old file name
            $cour->setImage($img);
        }

        $em->flush();

        return $this->redirectToRoute('cours_edit', array('id' => $cour->getId()));
    }

    return $this->render('cours/edit.html.twig', array(
        'cour' => $cour,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),

    ));
}

Ошибка: вызов функции-члена guessExtension () в строке именно в этой строке «$ imageName = md5 (uniqid ()). '.'. $ Image-> guessExtension ();»

Farouk Douglas 13.05.2018 01:14

@FaroukDouglas Отредактировал, забыл добавить подсказку типа ...;)

Preciel 13.05.2018 01:17

я имею в виду, какие изменения я должен сделать в этой строке "$ imageName = md5 (uniqid ()). '.'. $ image-> guessExtension ();"

Farouk Douglas 13.05.2018 01:33

Ах, извините, забыл удалить ваш код ... Опять обновился ...;)

Preciel 13.05.2018 01:41

Другие вопросы по теме