在字符串上调用成员函数 guessExtension()
Call to a member function guessExtension() on string
在 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)
;
}
图片Class:
实际上,我按照他手动制作此 class 的教程进行操作,但我使用命令创建 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;
}
}
替换
$file = $imageEn->getImage()
和
$file = $form->get('image')->getData();
对我来说,是实体的类型暗示把事情搞砸了:
// 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 {}
在 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)
;
}
图片Class:
实际上,我按照他手动制作此 class 的教程进行操作,但我使用命令创建 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;
}
}
替换
$file = $imageEn->getImage()
和
$file = $form->get('image')->getData();
对我来说,是实体的类型暗示把事情搞砸了:
// 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 {}