De momento he conseguido seguir la guia y poder almacenar las fotos, pero tengo un problemilla y es que no consigo que me almacene la foto usando el Id como nombre seguido de su extension. Si lo almaceno con su nombre original, si se almacena, pero quiero almacenarlo con el id como nombre para que cada foto tenga un nombre único. El campo Id es Auto y sigo la guia ,pero no consigo que funione. Os dejo el Picture.php por si me podeis ayudar:
Código PHP:
Ver original/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class Picture
{
private $temp;
/**
* @Assert\File(maxSize="6000000")
*/
private $file;
/**
* @var integer
*
* @ORM\Column(type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank
*/
public $nombre;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
/**
* @var \Perrobuscado
*
* @ORM\ManyToOne(targetEntity="Perrobuscado")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_perrobuscado", referencedColumnName="id")
* })
*/
private $idPerroBuscado;
/**
* Set idPerroBuscado
*
* @param \minsal\academicaBundle\Entity\Perrobuscado $idPerroBuscado
* @return Perrobuscado
*/
public function setIdPerroBuscado(\minsal\academicaBundle\Entity\Perrobuscado $idPerroBuscado = null)
{
$this->idPerroBuscado = $idPerroBuscado;
return $this;
}
/**
* Get idPerroBuscado
*
* @return \minsal\academicaBundle\Entity\Perrobuscado
*/
public function getIdPerroBuscado()
{
return $this->idPerroBuscado;
}
protected function getUploadRootDir()
{
// la ruta absoluta del directorio donde se deben
// guardar los archivos cargados
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
protected function getUploadDir()
{
// se deshace del __DIR__ para no meter la pata
// al mostrar el documento/imagen cargada en la vista.
return 'bundles/minsalacademica/imagenes/Pictures';
}
/**
* Sets file.
*
* @param UploadedFile $file
*/
public function setFile(UploadedFile $file = null)
{
// check if we have an old image path
if (is_file($this->getAbsolutePath())) { // store the old name to delete after the update
$this->temp = $this->getAbsolutePath();
} else {
$this->path = 'initial';
}
}
/**
* Get file.
*
* @return UploadedFile
*/
public function getFile()
{
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
if (null !== $this->getFile()) {
$this->path = $this->getFile()->guessExtension();
}
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload()
{
if (null === $this->getFile()) {
return;
}
// check if we have an old image
if (isset($this->temp)) { // delete the old image
// clear the temp image path
$this->temp = null;
}
// you must throw an exception here if the file cannot be moved
// so that the entity is not persisted to the database
// which the UploadedFile move() method does
$this->getFile()->move(
$this->getUploadRootDir(),
$this->id.'.'.$this->getFile()->guessExtension()
);
$this->setFile(null);
}
/**
* @ORM\PreRemove()
*/
public function storeFilenameForRemove()
{
$this->temp = $this->getAbsolutePath();
}
/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
if (isset($this->temp)) { }
}
public function getAbsolutePath()
{
return null === $this->path
? null
: $this->getUploadRootDir().'/'.$this->id.'.'.$this->path;
}
public function getWebPath()
{
return null === $this->path
? null
: $this->getUploadDir().'/'.$this->path;
}
}
Así no almacena ninguna imagen y en el atributo path, siempre almacena 'initial'.
Saludos.