Ya me he leído la documentación que me recomendaste, pero tengo aun algunos problemas, el primero es que las validaciones de la entidad imagen no están funcionando ya que no validan y la segunda es que me está guardando en la base de datos el nombre de las imágenes sin la extensión…. A continuación muestro el código
Gracias y espero que me puedan seguir ayudando
Código PHP:
Ver originalclass Imagen
{
/**
* @var string
*
* @ORM\Column(name="imagen", type="string", length=20, nullable=false)
* @Assert\File(maxSize = "500k", mimeTypes = {"application/jpg"})
*/
protected $imagen;
public function subirImagen($directorio)
{
if($this->imagen === null)
return false;
$nombreImagen = uniqid('anuncio-').'.'.$this->imagen->guessExtension(); $this->imagen->move($directorio, $nombreImagen);
$this->setImagen($nombreImagen);
return true;
}
}
class ImagenType extends AbstractType
{
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder
->add('imagen', 'file', array( 'required' => false,
'by_reference' => false,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array( 'data_class' => 'Anuncios\FrontendBundle\Entity\Imagen'
));
}
public function getName()
{
return 'anuncios_frontendbundle_imagentype';
}
}
class AnuncioType extends AbstractType
{
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder
->add('asunto')
->add('precio')
->add('moneda')
->add('descripcion')
->add('nombre')
->add('telefono')
->add('categoria')
->add('imagenes', 'collection', array( 'type' => new ImagenType(),
'by_reference' => false,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array( 'data_class' => 'Anuncios\FrontendBundle\Entity\Anuncio'
));
}
public function getName()
{
return 'anuncios_frontendbundle_anunciotype';
}
}
En el controller
public function anuncioNuevoAction()
{
$anuncio = new Anuncio();
$imagen1 = new Imagen();
$imagen2 = new Imagen();
$imagen3 = new Imagen();
$anuncio->addImagene($imagen1);
$anuncio->addImagene($imagen2);
$anuncio->addImagene($imagen3);
$formulario = $this->createForm(new AnuncioType(), $anuncio);
$peticion = $this->getRequest();
if($peticion->getMethod()== 'POST')
{
$formulario->bind($peticion);
if($formulario->isValid())
{
$em = $this->getDoctrine()->getManager();
$anuncio->setFecha(new \DateTime());
$anuncio->setUsuario($this->getUser());
$directorio = $this->container->getParameter('anuncios.directorio.web');
if(!$imagen1->subirImagen($directorio))
$anuncio->removeImagene($imagen1);
if(!$imagen2->subirImagen($directorio))
$anuncio->removeImagene($imagen2);
if(!$imagen3->subirImagen($directorio))
$anuncio->removeImagene($imagen3);
$em->persist($anuncio);
}
}
return $this->render('FrontendBundle:Anuncios:anuncioFormulario.html.twig', array( 'formulario' => $formulario->createView(),
));
}