Bonsoir à tous,
je plante le décore! dans mon application, j'ai une entité appartement qui est constituée de divers champs.. (nombre de pièce, surface, etc.). j'ai une autre entité qui est appartImg qui est donc des images associés à un appartement.
J'ai donc créé une relation OneToMany:
dans l'entity appartement:
1 2 3 4 5 6 7 8 9
| /**
* @ORM\OneToMany(targetEntity="appartImg", mappedBy="appartement")
*/
protected $appartImg;
public function __construct()
{
$this->products = new ArrayCollection();
} |
dans l'entity appartImg
1 2 3 4 5
| /**
* @ORM\ManyToOne(targetEntity="appartement", inversedBy="appartImg")
* @ORM\JoinColumn(name="photoid", referencedColumnName="id")
*/
protected $appartement; |
par la suite j'ai donc crée dans mon controler tout ce qu'il faut pour uploader mes images comme indiqué dans la doc http://symfony.com/fr/doc/current/co...e_uploads.html
dans l'entity il y à donc plusieurs fonction afin de gérer l'upload ( initialisation des path , puis bouger le fichier au bon endroit) cf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
public function getAbsolutePath()
{
return null === $this->path ? null : $this->getUploadRootDir().'/'.$this->path;
}
public function getWebPath()
{
return null === $this->path ? null : $this->getUploadDir().'/'.$this->path;
}
protected function getUploadRootDir()
{
// le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
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.
// echo $this->getPhotoid(); .
return '/img/appartements/';
}
/////////////////////////////////////////////////////////////////////////////////
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
if (null !== $this->file) {
// faites ce que vous voulez pour générer un nom unique
$this->path = sha1(uniqid(mt_rand(), true)).'.'.$this->file->guessExtension();
}
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
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);
}
/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
if ($file = $this->getAbsolutePath()) {
unlink($file);
}
} |
cela fonctionne parfaitement et mes photos sont bien dans /img/appartements/'.
Maintenant mon but est d'uloader mes photos en fonction 'photoid' c'est a dire dans:
/img/appartements/$photoid
j'ai donc utilisé la fonction getPhotoid (créé par symfony) qui "devrait" me retourner mon $photoid et concaténer le tout:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| protected function getUploadRootDir()
{
// le chemin absolu du répertoire où les documents uploadés doivent être sauvegardés
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
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.
// echo $this->getPhotoid(); .
return '/img/appartements/'.$this->getphotoid();
} |
voilà bien sur cela ne fonctionne pas mon image est toujours dans '/img/appartements/'
Merci pour votre aide.
Partager