Вызов функции-члена guessExtension() для строки

В Symfony 4 я получаю эту ошибку: Вызов функции-члена guessExtension() для строки В предыдущем случае я использовал тот же код для загрузки изображения и все хорошо, но здесь я получаю сообщение об ошибке. Кто-нибудь сталкивался с такой же проблемой и решил?

$em = $this->getDoctrine()->getManager();
    $imageEn = new Image();

     $form = $this->createForm(ImageUploadType::class, $imageEn);

     $form->handleRequest($request);

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


     /** @var Symfony\Component\HttpFoundation\File\UploadedFile $file */

        $file = $imageEn->getImage();

        $fileName = md5(uniqid()).'.'.$file->guessExtension();

        $file->move($this->getParameter('image_directory'), $fileName);

        $imageEn->setImage($fileName);
        $em->persist($imageEn);
        $em->flush();

        $this->addFlash('notice', 'Post Submitted Successfully!!!');

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

Форма:

  {
    $builder
        ->add('title', TextType::class)
        ->add('description', TextType::class)
        ->add('image', FileType::class, array('label'=>'Upload Image'))
        ->add('submit', SubmitType::class)
    ;
}

Класс изображения:

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

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
* @ORM\Entity(repositoryClass="App\Repository\ImageRepository")
*/
class Image
{
/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

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

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

/**
 * @ORM\Column(type="string", length=255)
 * @Assert\NotBlank(message="Please upload image")
 * @Assert\File(mimeTypes={"image/jpeg"})
 */
private $image;

public function getId()
{
    return $this->id;
}

public function getTitle(): ?string
{
    return $this->title;
}

public function setTitle(string $title): self
{
    $this->title = $title;

    return $this;
}

public function getDescription(): ?string
{
    return $this->description;
}

public function setDescription(string $description): self
{
    $this->description = $description;

    return $this;
}

public function getImage(): ?string
{
    return $this->image;
}

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

    return $this;
}

}


person Community    schedule 02.04.2018    source источник
comment
Что у вас есть в вашем объекте $request? Вы видите в нем файл?   -  person Ugo T.    schedule 02.04.2018
comment
Нет, это просто публичная функция indexAction(Request $request){}   -  person    schedule 02.04.2018
comment
Нет, я имею в виду, когда вы dump($request->files) видите в нем файл, который вы ожидаете? Во-вторых, что должен возвращать ваш класс Image при вызове метода getImage() (объект, строка?)   -  person Ugo T.    schedule 02.04.2018
comment
Он показывает c/xampp/tmp/php3773.tmp   -  person    schedule 02.04.2018
comment
Итак, вы правильно публикуете файл, но ваш объект Image возвращает строку при вызове getImage(). Можете ли вы показать нам свой метод createForm(), пожалуйста?   -  person Ugo T.    schedule 02.04.2018
comment
Я обновил вопрос, пожалуйста, проверьте   -  person    schedule 02.04.2018
comment
да, как эта общедоступная функция buildForm (FormBuilderInterface $ builder, array $ options)   -  person    schedule 02.04.2018
comment
Да, извините, что быстро написал, я удалил свой комментарий, но было слишком поздно...   -  person Ugo T.    schedule 02.04.2018
comment
Нет, все в порядке... Я всего лишь ученик, самоучка, разработчик Symfony..   -  person    schedule 02.04.2018
comment
Я не вижу, что здесь не так. Не могли бы вы показать свой класс изображения или хотя бы метод getImage? Вы пытались dump($imageEn->getImage()); узнать, что это за строка?   -  person Ugo T.    schedule 02.04.2018
comment
Вот публичная функция getImage(): ?string { return $this-›image; }   -  person    schedule 02.04.2018
comment
Когда я попытался сбросить(), я получил этот C:\xampp\tmp\php2479.tmp   -  person    schedule 02.04.2018
comment
Хорошо, можешь показать свой полный Image класс, пожалуйста? Вам будет легче понять вашу проблему. Вы можете добавить его к начальному вопросу, чтобы иметь всю информацию в одном месте.   -  person Ugo T.    schedule 02.04.2018
comment
Привет, Уго, пожалуйста, проверь класс..   -  person    schedule 02.04.2018
comment
Извините, я тоже застрял... :/ Я не понимаю, почему ваш атрибут изображения заполнен строкой вместо файлового объекта.   -  person Ugo T.    schedule 02.04.2018
comment
Это новый тип проблемы??   -  person    schedule 03.04.2018


Ответы (2)


Заменять

$file = $imageEn->getImage()

с

$file = $form->get('image')->getData();
person Pranan Subba    schedule 03.04.2018
comment
у меня та же проблема. я использую форму html, а не форму symfony !! - person Youssef Boudaya; 17.05.2019
comment
Нет проблем, используйте этот код: $file = $request-›files-›get('name_file'); Не забудьте форму: ‹метод формы=post enctype=multipart/form-data› - person juanitourquiza; 10.01.2020

Для меня это было подсказкой типа сущности, которая все испортила:

// I had to change this:
public function getImage(): ?string {}
public function setImage(string $image): self {}

// To this (both without 'string'):
public function getImage() {}
public function setImage( $image): self {}
person Martijn    schedule 01.11.2018