Php Symfony 4如何上传一个公司的多张图片?
我来找你是因为我有点小麻烦 我想能够上传一篇文章的几个图片, 但是我打不通我在阻拦我不知道怎么做 如果你能帮助我,或者如果你有一些教程可以帮助我,我会和你分享我的代码,因为我看了,但有些教程不是很明确 在我的控制器中:Php Symfony 4如何上传一个公司的多张图片?,php,symfony,file-upload,Php,Symfony,File Upload,我来找你是因为我有点小麻烦 我想能够上传一篇文章的几个图片, 但是我打不通我在阻拦我不知道怎么做 如果你能帮助我,或者如果你有一些教程可以帮助我,我会和你分享我的代码,因为我看了,但有些教程不是很明确 在我的控制器中: public function addArticle(Request $request): Response { $article = new Article(); $form = $this->createForm(ArticleType::class,
public function addArticle(Request $request): Response
{
$article = new Article();
$form = $this->createForm(ArticleType::class, $article);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$file = $article->getImages();
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
try {
$file->move(
$this->getParameter('images_directory'),
$fileName
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$em = $this->getDoctrine()->getManager();
$em->persist($article);
$em->flush();
}
return $this->render('backOffice/home/add-article.html.twig', [
'form' => $form->createView()
]);
}
我的身体:
class Article
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
* @Assert\Length(
* min = 5,
* max = 255,
* minMessage = "Votre titre doit contenir au minimum {{ limit }} caractères",
* maxMessage = "Votre titre doit contenir au maximum {{ limit }} caractères")
*/
private $title;
/**
* @ORM\Column(type="text")
* @Assert\NotBlank()
* @Assert\Length(
* min="20",
* minMessage="Votre description doit contenir au minimum {{ limit }} caractères"
* )
*/
private $description;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Image", mappedBy="article")
* @Assert\NotBlank()
* @Assert\File(
* mimeTypes={"image/jpeg", "image/png", "image/gif"},
* mimeTypesMessage = "Please upload a valid Image"
* )
*/
private $images;
/**
* Article constructor.
* @throws \Exception
*/
public function __construct()
{
$this->images = new ArrayCollection();
$this->createdAt = new \DateTime('now', new \DateTimeZone('Europe/Paris'));
}
public function getId(): ?int
{
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 getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
public function setUpdatedAt(?\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* @return Collection|Image[]
*/
public function getImages(): Collection
{
return $this->images;
}
public function addImage(Image $image): self
{
if (!$this->images->contains($image)) {
$this->images[] = $image;
$image->setArticle($this);
}
return $this;
}
public function removeImage(Image $image): self
{
if ($this->images->contains($image)) {
$this->images->removeElement($image);
// set the owning side to null (unless already changed)
if ($image->getArticle() === $this) {
$image->setArticle(null);
}
}
return $this;
}
}
在我的实体图像中:
class Image
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Article", inversedBy="images")
* @ORM\JoinColumn(nullable=false)
*/
private $article;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getArticle(): ?Article
{
return $this->article;
}
public function setArticle(?Article $article): self
{
$this->article = $article;
return $this;
}
}
感谢您的帮助图像和文章是一对多关系,但您的代码将其视为一对一关系。 有两种方法可以解决此问题: 1-
2-在图像实体中使用lifecycle callback在预更新和预版本事件时将图像上载到服务器我有此错误:>您可以帮助我使用什么方法吗?
$files = $article->getImages();
foreach ($files as $file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
try {
$file->move(
$this->getParameter('images_directory'),
$fileName
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
}