Вызов функции-члена 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;
}

}

Что у вас в объекте $request? Вы видите в нем файл?

Ugo T. 02.04.2018 13:01

Нет, это просто публичная функция indexAction (Request $ request) {}

user9368003 02.04.2018 14:58

Нет, я имею в виду, когда вы dump($request->files), вы видите файл, который ожидаете от него? Во-вторых, что должен возвращать ваш класс Image при вызове метода getImage() (объект, строка?)

Ugo T. 02.04.2018 18:14

Он показывает c / xampp / tmp / php3773.tmp

user9368003 02.04.2018 18:34

Хорошо, значит, вы правильно публикуете файл, но ваш объект Image возвращает строку, когда вы вызываете getImage(). Не могли бы вы показать нам, пожалуйста, метод createForm()?

Ugo T. 02.04.2018 18:48

Я обновил вопрос, пожалуйста, проверьте

user9368003 02.04.2018 18:53

да, как эта общедоступная функция buildForm (FormBuilderInterface $ builder, array $ options)

user9368003 02.04.2018 19:01

Да, извините, я быстро написал, я удалил свой комментарий, но было уже слишком поздно ...

Ugo T. 02.04.2018 19:05

Нет, все в порядке ... Я просто ученик, разработчик на Symfony-самоучке ..

user9368003 02.04.2018 19:06

Я не вижу, что здесь не так. Не могли бы вы показать свой класс Image или хотя бы метод getImage? Вы пробовали на dump($imageEn->getImage()); посмотреть, что это за струна?

Ugo T. 02.04.2018 19:07

Вот публичная функция getImage ():? String {return $ this-> image; }

user9368003 02.04.2018 19:09

Когда я попытался выполнить dump (), я получил этот "C: \ xampp \ tmp \ php2479.tmp"

user9368003 02.04.2018 19:10

Хорошо, не могли бы вы показать свой полный класс Image, пожалуйста? Так будет легче понять вашу проблему. Вы можете добавить его к исходному вопросу, чтобы вся информация была в одном месте.

Ugo T. 02.04.2018 19:24

Привет, Уго, пожалуйста, проверьте класс ..

user9368003 02.04.2018 19:30

Извините, я тоже застрял ...: / Я не понимаю, почему ваш атрибут изображения дополнен строкой, а не файловым объектом.

Ugo T. 02.04.2018 20:03

Это новый вопрос ??

user9368003 03.04.2018 03:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
4
16
8 106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Заменять

$file = $imageEn->getImage()

с участием

$file = $form->get('image')->getData();

У меня такая же проблема. Я использую html-форму, а не форму Symfony !!

Youssef Boudaya 16.05.2019 23:42

Нет проблем, используйте этот код: $ file = $ request-> files-> get ('name_file'); Не забудьте форму: <form method = "post" enctype = "multipart / form-data">

juanitourquiza 10.01.2020 14:36

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

// 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 {}

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