src/Controller/PublicacionController.php line 91

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  6. use Symfony\Component\String\Slugger\SluggerInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  11. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use App\Entity\Publicacion;
  14. use App\Form\PublicacionType;
  15. use App\Form\PublicacionEditarType;
  16. use App\Form\PublicacionImagenType;
  17. use App\Form\PublicacionArchivoType;
  18. use App\Entity\Imagen;
  19. use App\Entity\Archivo;
  20. class PublicacionController extends AbstractController
  21. {
  22.     private $entityManager;
  23.     private $repository;
  24.     private $imagenRepository;
  25.     private $archivoRepository;
  26.     private $urlImagenesPublicaciones;
  27.     private $urlArchivosPublicaciones;
  28.     public function __construct(EntityManagerInterface $entityManager,ParameterBagInterface $parameterBag)
  29.     {
  30.         //Doctrine
  31.         $this->entityManager $entityManager;
  32.         $this->repository $this->entityManager->getRepository(Publicacion::class);
  33.         $this->imagenRepository $this->entityManager->getRepository(Imagen::class);
  34.         $this->archivoRepository $this->entityManager->getRepository(Archivo::class);
  35.         // Acceder a los parĂ¡metros definidos en service.yaml
  36.         $this->urlImagenesPublicaciones $parameterBag->get('imagenes_publicaciones');
  37.         $this->urlArchivosPublicaciones $parameterBag->get('archivos_publicaciones_directory');
  38.     }
  39.     /**
  40.      * Require ROLE_ADMIN for only this controller method.
  41.      * @Route("/app/publicacion", name="app_publicacion")
  42.      * @IsGranted("ROLE_ADMIN")
  43.      */
  44.     public function index(): Response
  45.     {
  46.         //Obtengo todas las entidades
  47.         $publicaciones $this->repository->findByAllNoticias();
  48.         //Retorno la vista
  49.         return $this->render(
  50.             'Publicacion/index.html.twig',
  51.             [
  52.                 'publicaciones' => $publicaciones,
  53.             ]
  54.         );
  55.     }
  56.     /**    
  57.      * @Route("/publicacion/listar", name="app_publicaciones")    
  58.      */
  59.     //Funcion que lista las publicaciones
  60.     public function listarNoticias(): Response
  61.     {
  62.         //Obtengo todas las entidades
  63.         $publicaciones $this->repository->findBy([], ['id' => 'DESC']);
  64.         //Retorno la vista
  65.         return $this->render(
  66.             'Publicacion/listarPublicaciones.html.twig',
  67.             [
  68.                 'publicaciones' => $publicaciones,
  69.             ]
  70.         );
  71.     }
  72.     /**
  73.      * @Route("/publicacion/ver/{idPublicacion}", name="app_publicacion_ver")
  74.      */
  75.     //Funcion para visualizar una publicacion
  76.     public function verPublicacion($idPublicacion): Response
  77.     {
  78.         //Obtengo la entidad
  79.         $publicacion $this->repository->find($idPublicacion);
  80.         //Obtengo las ultimas noticias
  81.         $ultimasPublicaciones $this->repository->findByUltimasNoticiasColumna();
  82.         //Retorno a la vista
  83.         return $this->render(
  84.             'Publicacion/verPublicacion.html.twig',
  85.             [
  86.                 'publicacion' => $publicacion,
  87.                 'ultimasPublicaciones' => $ultimasPublicaciones,
  88.             ]
  89.         );
  90.     }
  91.     /**
  92.      * Require ROLE_ADMIN for only this controller method.
  93.      *
  94.      * @Route("/publicacion/nueva", name="app_publicacion_nueva")
  95.      *
  96.      * @IsGranted("ROLE_ADMIN")
  97.      */
  98.     //Funcion para crear una nueva publicacion
  99.     public function nuevaPublicacion(Request $requestSluggerInterface $slugger): Response
  100.     {
  101.         //Creo la entidad
  102.         $publicacion = new Publicacion();
  103.         //Defino el Formulario
  104.         $form $this->createForm(PublicacionType::class, $publicacion);
  105.         //Si se envia el formulario , existe un request
  106.         $form->handleRequest($request);
  107.         //Si se disparo el formulario y es valido
  108.         if ($form->isSubmitted() && $form->isValid()) {
  109.             //Obtengo la entidad del formulario
  110.             $publicacion $form->getData();
  111.             //Le doy persistencia a
  112.             $this->entityManager->persist($publicacion);
  113.             //Asiento los cambios en la base de datos
  114.             $this->entityManager->flush();
  115.             //Obtengo las imagenes que subi 
  116.             $imagenesSubidas $form->get('imagenes')->getData();
  117.             //Obtengo los archivos que subi
  118.             $archivosSubidos $form->get('archivos')->getData();
  119.             //Obtengo la portada
  120.             $portada $form->get('portada')->getData();
  121.             //Si existe portada
  122.             if ($portada) {
  123.                 $this->PublicacionAdjuntarImagenPortada($publicacion$portada$slugger);
  124.             }
  125.             //Itero por cada imagen subida
  126.             foreach ($imagenesSubidas as $imagenSubida) {
  127.                 $this->publicacionAdjuntarImagen($publicacion$imagenSubida$slugger);
  128.             }
  129.             //Itero por cada archivo
  130.             foreach ($archivosSubidos as $archivoSubido) {
  131.                 $this->publicacionAdjuntarArchivo($publicacion$archivoSubido$slugger);
  132.             }
  133.             //Fijo el Autor de la publicacion
  134.             $autor $this->get('security.token_storage')->getToken()->getUser();
  135.             $autor->addPublicacion($publicacion);
  136.             $publicacion->setAutor($autor);
  137.             //Le doy persistencia a la imagen
  138.             $this->entityManager->persist($publicacion);
  139.             //Asiento los cambios en la base de datos
  140.             $this->entityManager->flush();
  141.             //Aviso
  142.             $this->addFlash('exito''La Publicacion se creo exitosamente');
  143.             //Redirecciono        
  144.             return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  145.         }
  146.         //Retorno la vista
  147.         return $this->render(
  148.             'Publicacion/nueva.html.twig',
  149.             [
  150.                 'form' => $form->createView(),
  151.             ]
  152.         );
  153.     }
  154.     /**
  155.      * Require ROLE_ADMIN for only this controller method.
  156.      * 
  157.      * @Route("/publicacion/editar/{idPublicacion}", name="app_publicacion_editar", methods={"GET","HEAD","POST"})
  158.      * 
  159.      * @IsGranted("ROLE_ADMIN")
  160.      */
  161.     //Funcion para editar una publicacion
  162.     public function editarPublicacion($idPublicacionRequest $requestSluggerInterface $slugger): Response
  163.     {
  164.         //Obtengo la entidad
  165.         $publicacion $this->repository->find($idPublicacion);
  166.         //Defino el Formulario
  167.         $form $this->createForm(PublicacionEditarType::class, $publicacion);
  168.         //Si se envia el formulario , existe un request
  169.         $form->handleRequest($request);
  170.         //Si se disparo el formulario y es valido
  171.         if ($form->isSubmitted() && $form->isValid()) {
  172.             //Obtengo la entidad del formulario
  173.             $publicacion $form->getData();
  174.             //Obtengo las imagenes que subi 
  175.             $imagenesSubidas $form->get('imagenes')->getData();
  176.             //Obtengo los archivos que subi
  177.             $archivosSubidos $form->get('archivos')->getData();
  178.             //Obtengo la portada
  179.             $portada $form->get('portada')->getData();
  180.             //Si existe portada
  181.             if ($portada) {
  182.                 $this->PublicacionAdjuntarImagenPortada($publicacion$portada$slugger);
  183.             }
  184.             //Itero por cada imagen subida
  185.             foreach ($imagenesSubidas as $imagenSubida) {
  186.                 $this->publicacionAdjuntarImagen($publicacion$imagenSubida$slugger);
  187.             }
  188.             //Itero por cada archivo
  189.             foreach ($archivosSubidos as $archivoSubido) {
  190.                 $this->publicacionAdjuntarArchivo($publicacion$archivoSubido$slugger);
  191.             }
  192.             //Le doy persistencia 
  193.             $this->entityManager->persist($publicacion);
  194.             //Asiento los cambios en la base de datos
  195.             $this->entityManager->flush();
  196.             //Aviso
  197.             $this->addFlash('exito''La Publicacion se edito exitosamente');
  198.             //Redirecciono    
  199.             return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  200.         }
  201.         //Retorno la vista
  202.         return $this->render(
  203.             'Publicacion/editar.html.twig',
  204.             [
  205.                 'form' => $form->createView(),
  206.                 'publicacion' => $publicacion,
  207.             ]
  208.         );
  209.     }
  210.     /**
  211.      * Require ROLE_ADMIN for only this controller method.
  212.      * 
  213.      * @Route("/publicacion/eliminar/{idPublicacion}", name="app_publicacion_eliminar", methods={"GET","HEAD","POST"})
  214.      * 
  215.      * @IsGranted("ROLE_ADMIN")
  216.      */
  217.     //Funcion para editar una publicacion
  218.     public function eliminarPublicacion($idPublicacionRequest $requestSluggerInterface $slugger): Response
  219.     {
  220.         //Obtengo la entidad
  221.         $publicacion $this->repository->find($idPublicacion);
  222.         //Elimino las imagenes
  223.         $this->eliminarImagenesPublicacion($publicacion);
  224.         //Elimino los archivos
  225.         $this->eliminarArchivosPublicacion($publicacion);
  226.         //Le doy persistencia 
  227.         $this->entityManager->remove($publicacion);
  228.         //Asiento los cambios en la base de datos
  229.         $this->entityManager->flush();
  230.         //Aviso
  231.         $this->addFlash('exito''La Publicacion se elimino exitosamente');
  232.         //Redirecciono        
  233.         return $this->redirectToRoute('app_publicacion');
  234.     }
  235.     /**
  236.      * Require ROLE_ADMIN for only this controller method.
  237.      * 
  238.      * @Route("/publicacion/{idPublicacion}/agregarImagen", name="app_publicacion_imagen_agregar", methods={"GET","HEAD","POST"})
  239.      * 
  240.      * @IsGranted("ROLE_ADMIN")
  241.      */
  242.     //Funcion para editar una publicacion
  243.     public function agregarImagenPublicacion($idPublicacionRequest $requestSluggerInterface $slugger): Response
  244.     {
  245.         //Obtengo la entidad
  246.         $publicacion $this->repository->find($idPublicacion);
  247.         //Defino el Formulario
  248.         $form $this->createForm(PublicacionImagenType::class, $publicacion);
  249.         //Si se envia el formulario , existe un request
  250.         $form->handleRequest($request);
  251.         //Si se disparo el formulario y es valido
  252.         if ($form->isSubmitted() && $form->isValid()) {
  253.             //Obtengo la entidad del formulario
  254.             $publicacion $form->getData();
  255.             //Obtengo la imagen que subi 
  256.             $imagenesSubidas $form->get('imagenes')->getData();
  257.             //Itero por cada imagen subida
  258.             foreach ($imagenesSubidas as $imagenSubida) {
  259.                 $this->publicacionAdjuntarImagen($publicacion$imagenSubida$slugger);
  260.             }
  261.             //Le doy persistencia 
  262.             $this->entityManager->persist($publicacion);
  263.             //Asiento los cambios en la base de datos
  264.             $this->entityManager->flush();
  265.             //Aviso
  266.             $this->addFlash('exito''La Publicacion se edito exitosamente');
  267.             //Redirecciono        
  268.             return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  269.         }
  270.         //Retorno la vista
  271.         return $this->render(
  272.             'Publicacion/agregarImagen.html.twig',
  273.             [
  274.                 'form' => $form->createView(),
  275.                 'publicacion' => $publicacion,
  276.             ]
  277.         );
  278.     }
  279.     /**
  280.      * Require ROLE_ADMIN for only this controller method.
  281.      * 
  282.      * @Route("/publicacion/eliminarImagen/{idImagen}", name="app_publicacion_imagen_eliminar", methods={"GET","HEAD","POST"})
  283.      * 
  284.      * @IsGranted("ROLE_ADMIN")
  285.      */
  286.     //Funcion para eliminar una imagen de una publicacion
  287.     public function eliminarImagenPublicacion($idImagen)
  288.     {
  289.         //Obtengo la entidad
  290.         $imagen $this->imagenRepository->find($idImagen);
  291.         //Obtengo 
  292.         $publicacion $imagen->getPublicacion();
  293.         //Elimino fisicamente el archivo
  294.         $urlImagen $imagen->getUrl();
  295.         //Elimino la imagen Fisicamente en el FileSistem
  296.         unlink($urlImagen);
  297.         //Elimino logicamente la imagen de la entidad
  298.         $publicacion->removeImagen($imagen);
  299.         //Le doy persistencia 
  300.         $this->entityManager->remove($imagen);
  301.         $this->entityManager->persist($publicacion);
  302.         //Asiento los cambios en la base de datos
  303.         $this->entityManager->flush();
  304.         //Aviso
  305.         $this->addFlash('exito''Se elimino la imagen de la publicacion');
  306.         //Redirecciono        
  307.         return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  308.     }
  309.     /**
  310.      * Require ROLE_ADMIN for only this controller method.
  311.      * 
  312.      * @Route("/publicacion/{idPublicacion}/agregarArchivo", name="app_publicacion_archivo_agregar", methods={"GET","HEAD","POST"})
  313.      * 
  314.      * @IsGranted("ROLE_ADMIN")
  315.      */
  316.     //Funcion para editar una publicacion
  317.     public function agregarArchivoPublicacion($idPublicacionRequest $requestSluggerInterface $slugger): Response
  318.     {
  319.         //Obtengo la entidad
  320.         $publicacion $this->repository->find($idPublicacion);
  321.         //Defino el Formulario
  322.         $form $this->createForm(PublicacionArchivoType::class, $publicacion);
  323.         //Si se envia el formulario , existe un request
  324.         $form->handleRequest($request);
  325.         //Si se disparo el formulario y es valido
  326.         if ($form->isSubmitted() && $form->isValid()) {
  327.             //Obtengo la entidad del formulario
  328.             $publicacion $form->getData();
  329.             //Obtengo los archivos que subi
  330.             $archivosSubidos $form->get('archivos')->getData();
  331.             //Itero por cada imagen subida
  332.             foreach ($archivosSubidos as $archivoSubido) {
  333.                 $this->publicacionAdjuntarArchivo($publicacion$archivoSubido$slugger);
  334.             }
  335.             //Le doy persistencia 
  336.             $this->entityManager->persist($publicacion);
  337.             //Asiento los cambios en la base de datos
  338.             $this->entityManager->flush();
  339.             //Aviso
  340.             $this->addFlash('exito''La Publicacion se edito exitosamente');
  341.             //Redirecciono        
  342.             return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  343.         }
  344.         //Retorno la vista
  345.         return $this->render(
  346.             'publicacion/agregarArchivo.html.twig',
  347.             [
  348.                 'form' => $form->createView(),
  349.                 'publicacion' => $publicacion,
  350.             ]
  351.         );
  352.     }
  353.     /**
  354.      * Require ROLE_PRENSA for only this controller method.
  355.      * 
  356.      * @Route("/publicacion/eliminarArchivo/{idArchivo}", name="app_publicacion_archivo_eliminar", methods={"GET","HEAD","POST"})
  357.      * 
  358.      * @IsGranted("ROLE_PRENSA")
  359.      */
  360.     //Funcion para eliminar un archivo de una publicacion
  361.     public function eliminarArchivoPublicacion($idArchivo)
  362.     {
  363.         //Obtengo la entidad
  364.         $archivo $this->archivoRepository->find($idArchivo);
  365.         //Obtengo 
  366.         $publicacion $archivo->getPublicacion();
  367.         //Elimino fisicamente el archivo
  368.         $urlArchivo $archivo->getUrl();
  369.         //Elimino Fisicamente en el FileSistem
  370.         unlink($urlArchivo);
  371.         //Elimino logicamente 
  372.         $publicacion->removeArchivo($archivo);
  373.         //Le doy persistencia 
  374.         $this->entityManager->remove($archivo);
  375.         $this->entityManager->persist($publicacion);
  376.         //Asiento los cambios en la base de datos
  377.         $this->entityManager->flush();
  378.         //Aviso
  379.         $this->addFlash('exito''Se elimino el archivo de la publicacion');
  380.         //Redirecciono        
  381.         return $this->redirectToRoute('app_publicacion_ver', array('idPublicacion' => $publicacion->getId()));
  382.     }
  383.     //Funcion para eliminar las imagenes de una publicacion
  384.     private function eliminarImagenesPublicacion($publicacion)
  385.     {
  386.         //Borro las imagenes de la publicacion
  387.         $imagenes $publicacion->getImagenes();
  388.         //Itero sobre todas las imagenes
  389.         foreach ($imagenes as $imagen) {
  390.             //Elimino fisicamente el archivo
  391.             $urlImagen $imagen->getUrl();
  392.             //Elimino la imagen Fisicamente en el FileSistem
  393.             unlink($urlImagen);
  394.             //Elimino logicamente la imagen de la entidad
  395.             $publicacion->removeImagen($imagen);
  396.             $this->entityManager->remove($imagen);
  397.         }
  398.         //Le doy persistencia 
  399.         $this->entityManager->persist($publicacion);
  400.         //Asiento los cambios en la base de datos
  401.         $this->entityManager->flush();
  402.         //Retorno la entidad
  403.         return $publicacion;
  404.     }
  405.     //Funcion para eliminar los archivos de una publicacion
  406.     private function eliminarArchivosPublicacion($publicacion)
  407.     {
  408.         //Borro los archivos de la publicacion
  409.         $archivos $publicacion->getArchivos();
  410.         //Itero sobre todos los archivos
  411.         foreach ($archivos as $archivo) {
  412.             //Elimino fisicamente el archivo
  413.             $urlArchivo $archivo->getUrl();
  414.             //Elimino Fisicamente en el FileSistem
  415.             unlink($urlArchivo);
  416.             //Elimino logicamente 
  417.             $publicacion->removeArchivo($archivo);
  418.             $this->entityManager->remove($archivo);
  419.         }
  420.         //Le doy persistencia 
  421.         $this->entityManager->persist($publicacion);
  422.         //Asiento los cambios en la base de datos
  423.         $this->entityManager->flush();
  424.         //Retorno la entidad
  425.         return $publicacion;
  426.     }
  427.     //Funcion para Adjuntar una imagen a una publicacion
  428.     private function publicacionAdjuntarImagen($publicacion$imagenSubidaSluggerInterface $slugger)
  429.     {
  430.         //Si existe la imagen la trabajo para guardarla
  431.         if ($imagenSubida) {
  432.             //Obtengo el Nombre Original de la Imagen para incluir de forma seguro el nombre de archivo en la URL
  433.             $nombreOriginalImagen pathinfo($imagenSubida->getClientOriginalName(), PATHINFO_FILENAME);
  434.             //Es necesario para incluir de forma segura el nombre del archivo como parte de la URL (todo minusculas)
  435.             $nombreSeguroArchivo strtolower($slugger->slug($nombreOriginalImagen));
  436.             //Defino la URL completa de mi imagen subida
  437.             $urlImagen 'img/publicaciones/' $publicacion->getId() . '/' $nombreSeguroArchivo '.' $imagenSubida->guessExtension();
  438.             try {
  439.                 if (file_exists($urlImagen)) {
  440.                     $this->addFlash('aviso''La Imagen "' $nombreSeguroArchivo '" ya se encontraba subida , debe eliminar la anterior para volver a subir una nueva version');
  441.                 } else {
  442.                     //Muevo el archivo al directorio donde los almaceno
  443.                     $imagenSubida->move($this->urlImagenesPublicaciones "/" $publicacion->getId(), $urlImagen);
  444.                     //Creo la nueva entidad imagen..
  445.                     $imagen = new Imagen();
  446.                     //Asigno los datos a la imagen
  447.                     $imagen->setUrl($urlImagen);
  448.                     $imagen->setPublicacion($publicacion);
  449.                     $imagen->setNombre($nombreOriginalImagen);
  450.                     //Inserto mi imagen a la publicacion
  451.                     $publicacion->addImagen($imagen);
  452.                     //Le doy persistencia 
  453.                     $this->entityManager->persist($imagen);
  454.                 }
  455.             } catch (FileException $e) {
  456.                 $this->addFlash('aviso''Error al cargar la imagen');
  457.                 //Redirecciono al listado          
  458.                 return $this->redirectToRoute('app_publicacion');
  459.             }
  460.             //retorno la publicacion    
  461.             return $publicacion;
  462.         }
  463.     }
  464.     //Funcion para Adjuntar Archivos a una Publicacion
  465.     private function publicacionAdjuntarArchivo($publicacion$archivoSubidoSluggerInterface $slugger)
  466.     {
  467.         //Si existe la imagen la trabajo para guardarla
  468.         if ($archivoSubido) {
  469.             //Obtengo el Nombre Original de la Imagen para incluir de forma seguro el nombre de archivo en la URL
  470.             $nombreOriginalArchivo pathinfo($archivoSubido->getClientOriginalName(), PATHINFO_FILENAME);
  471.             //Es necesario para incluir de forma segura el nombre del archivo como parte de la URL (todo minusculas)
  472.             $nombreSeguroArchivo strtolower($slugger->slug($nombreOriginalArchivo));
  473.             //Defino la URL completa de mi imagen subida
  474.             $urlArchivo 'archivos/publicaciones/' $publicacion->getId() . '/' $nombreSeguroArchivo '.' $archivoSubido->guessExtension();
  475.             try {
  476.                 //Si el archivo existe, aviso del error
  477.                 if (file_exists($urlArchivo)) {
  478.                     $this->addFlash('aviso''El archivo "' $nombreSeguroArchivo '" ya se encontraba subido , debe eliminar el anterior para volver a subir una nueva version');
  479.                 } else {
  480.                     //Muevo el archivo al directorio donde los almaceno
  481.                     $archivoSubido->move($this->urlArchivosPublicaciones "/" $publicacion->getId(), $urlArchivo);
  482.                     //Creo la nueva entidad..
  483.                     $archivo = new Archivo();
  484.                     //Asigno los datos a la imagen
  485.                     $archivo->setUrl($urlArchivo);
  486.                     $archivo->setPublicacion($publicacion);
  487.                     $archivo->setNombre($nombreOriginalArchivo);
  488.                     //Inserto mi archivo a la publicacion
  489.                     $publicacion->addArchivo($archivo);
  490.                     //Le doy persistencia 
  491.                     $this->entityManager->persist($archivo);
  492.                 }
  493.             } catch (FileException $e) {
  494.                 $this->addFlash('aviso''Error al cargar la imagen');
  495.                 //Redirecciono al listado          
  496.                 return $this->redirectToRoute('app_publicacion');
  497.             }
  498.             //retorno la publicacion    
  499.             return $publicacion;
  500.         }
  501.     }
  502.     //Funcion para Adjuntar una imagen a una publicacion
  503.     private function PublicacionAdjuntarImagenPortada($publicacion$imagenSubidaSluggerInterface $slugger)
  504.     {
  505.         //Si existe la imagen la trabajo para guardarla
  506.         if ($imagenSubida) {
  507.             //Si hay una portada vieja debo borrarla..
  508.             if ($publicacion->getPortada()) {
  509.                 //Borro primero la imagen anterior..
  510.                 $portadaVieja $publicacion->getPortada();
  511.                 //Elimino fisicamente el archivo
  512.                 $urlImagenPortadaVieja $portadaVieja->getUrl();
  513.                 //Elimino la imagen Fisicamente en el FileSistem
  514.                 unlink($urlImagenPortadaVieja);
  515.                 //Elimino la entidad de la base
  516.                 $publicacion->setPortada(null);
  517.                 $this->entityManager->remove($portadaVieja);
  518.                 $this->entityManager->persist($publicacion);
  519.                 //Asiento los cambios en la base de datos
  520.                 $this->entityManager->flush();
  521.             }
  522.             //Obtengo el Nombre Original de la Imagen para incluir de forma seguro el nombre de archivo en la URL
  523.             $nombreOriginalImagen pathinfo($imagenSubida->getClientOriginalName(), PATHINFO_FILENAME);
  524.             //Es necesario para incluir de forma segura el nombre del archivo como parte de la URL (todo minusculas)
  525.             $nombreSeguroArchivo strtolower($slugger->slug($nombreOriginalImagen));
  526.             //Defino la URL completa de mi imagen subida
  527.             $urlImagen 'img/publicaciones/' $publicacion->getId() . '/portada.' $imagenSubida->guessExtension();
  528.             try {
  529.                 if (file_exists($urlImagen)) {
  530.                     $this->addFlash('aviso''La Imagen "' $nombreSeguroArchivo '" ya se encontraba subida , debe eliminar la anterior para volver a subir una nueva version');
  531.                 } else {
  532.                     //Muevo el archivo al directorio donde los almaceno
  533.                     $imagenSubida->move($this->urlImagenesPublicaciones "/" $publicacion->getId(), $urlImagen);
  534.                     //Creo la nueva entidad imagen..
  535.                     $imagen = new Imagen();
  536.                     //Asigno los datos a la imagen
  537.                     $imagen->setUrl($urlImagen);
  538.                     $imagen->setNombre($nombreOriginalImagen);
  539.                     //Inserto mi imagen a la publicacion
  540.                     $publicacion->setPortada($imagen);
  541.                     //Le doy persistencia 
  542.                     $this->entityManager->persist($imagen);
  543.                 }
  544.             } catch (FileException $e) {
  545.                 $this->addFlash('aviso''Error al cargar la imagen de portada');
  546.                 //Redirecciono al listado          
  547.                 return $this->redirectToRoute('app_publicacion');
  548.             }
  549.             //retorno la publicacion    
  550.             return $publicacion;
  551.         }
  552.     }
  553. }