<?php namespace App\Entity; use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\MappedSuperclass */ class File { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private ?int $id = NULL; /** * @ORM\Column(type="string", length=255) */ private string $name; /** * @ORM\Column(type="string", length=255, nullable=true) */ private ?string $path; /** * @ORM\Column(type="datetime", nullable=true) */ private $uploadDate; /** * @Assert\File(maxSize="6000000") */ protected $file; protected $kernelRootDir; /* * ============================================================================================ * =============================== FONCTIONS CUSTOM =========================================== * ============================================================================================ */ public function getWebPath() { return NULL === $this->path ? NULL : $this->getUploadDir() . '/' . $this->path; } protected function getUploadDir() { // on se débarrasse de « __DIR__ » afin de ne pas avoir de problème lorsqu'on affiche // le document/image dans la vue. return 'uploads/files'; } public function preUpload() { if (NULL !== $this->file) { // faites ce que vous voulez pour générer un nom unique $this->path = sha1(uniqid(strval(mt_rand()), TRUE)) . '.' . $this->file->guessExtension(); } } public function upload() { if (NULL === $this->file) { return; } // s'il y a une erreur lors du déplacement du fichier, une exception // va automatiquement être lancée par la méthode move(). Cela va empêcher // proprement l'entité d'être persistée dans la base de données si // erreur il y a $this->file->move($this->getUploadRootDir(), $this->path); unset($this->file); } /** * @return string * @deprecated */ public function getUploadRootDir() { // le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés return $this->getKernelRootDir() . '/public/' . $this->getUploadDir(); } /** * @return mixed * @deprecated */ public function getKernelRootDir() { return $this->kernelRootDir; } /** * @param mixed $kernelRootDir * * @deprecated */ public function setKernelRootDir($kernelRootDir) { $this->kernelRootDir = $kernelRootDir; return $this; } /** * @ORM\PostRemove() */ public function removeUpload() { if ($file = $this->getAbsolutePath()) { unlink($file); } } public function getAbsolutePath() { return NULL === $this->path ? NULL : $this->getUploadRootDir() . '/' . $this->path; } /* * ============================================================================================ * ============================== FIN FONCTIONS CUSTOM ======================================== * ============================================================================================ */ 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 getPath(): ?string { return $this->path; } public function setPath(?string $path): self { $this->path = $path; return $this; } public function getUploadDate(): ?DateTimeInterface { return $this->uploadDate; } public function setUploadDate(?DateTimeInterface $uploadDate): self { $this->uploadDate = $uploadDate; return $this; } }