В 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;
}
}
Нет, это просто публичная функция indexAction (Request $ request) {}
Нет, я имею в виду, когда вы dump($request->files), вы видите файл, который ожидаете от него? Во-вторых, что должен возвращать ваш класс Image при вызове метода getImage() (объект, строка?)
Он показывает c / xampp / tmp / php3773.tmp
Хорошо, значит, вы правильно публикуете файл, но ваш объект Image возвращает строку, когда вы вызываете getImage(). Не могли бы вы показать нам, пожалуйста, метод createForm()?
Я обновил вопрос, пожалуйста, проверьте
да, как эта общедоступная функция buildForm (FormBuilderInterface $ builder, array $ options)
Да, извините, я быстро написал, я удалил свой комментарий, но было уже слишком поздно ...
Нет, все в порядке ... Я просто ученик, разработчик на Symfony-самоучке ..
Я не вижу, что здесь не так. Не могли бы вы показать свой класс Image или хотя бы метод getImage? Вы пробовали на dump($imageEn->getImage()); посмотреть, что это за струна?
Вот публичная функция getImage ():? String {return $ this-> image; }
Когда я попытался выполнить dump (), я получил этот "C: \ xampp \ tmp \ php2479.tmp"
Хорошо, не могли бы вы показать свой полный класс Image, пожалуйста? Так будет легче понять вашу проблему. Вы можете добавить его к исходному вопросу, чтобы вся информация была в одном месте.
Привет, Уго, пожалуйста, проверьте класс ..
Извините, я тоже застрял ...: / Я не понимаю, почему ваш атрибут изображения дополнен строкой, а не файловым объектом.
Это новый вопрос ??




Заменять
$file = $imageEn->getImage()
с участием
$file = $form->get('image')->getData();
У меня такая же проблема. Я использую html-форму, а не форму Symfony !!
Нет проблем, используйте этот код: $ file = $ request-> files-> get ('name_file'); Не забудьте форму: <form method = "post" enctype = "multipart / form-data">
Для меня это было напечатанное изображение сущности, которая все испортила:
// 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 {}
Что у вас в объекте
$request? Вы видите в нем файл?