ccc

Symfony CRUD con formularios de campos que tiren de otras tablas: Routing y Controller

En el routing:
addCineasta:
    path:     /peliculas/addCineasta
    defaults: { _controller: edcBundle:Default:addCineasta }
addPelicula:
    path:     /peliculas/addPelicula
    defaults: { _controller: edcBundle:Default:addPelicula }
delCineasta:
    path:     /peliculas/delCineasta/{id}
    defaults: { _controller: edcBundle:Default:delCineasta }
delPelicula:
    path:     /peliculas/delPelicula/{id}
    defaults: { _controller: edcBundle:Default:delPelicula }
editCineasta:
    path:     /peliculas/editCineasta/{id}
    defaults: { _controller: edcBundle:Default:editCineasta }
editPelicula:
    path:     /peliculas/editPelicula/{id}
    defaults: { _controller: edcBundle:Default:editPelicula }
listarCineastas:
    path:     /peliculas/listarCineastas
    defaults: { _controller: edcBundle:Default:listarCineastas }
listarPeliculas:
    path:     /peliculas/listarPeliculas
    defaults: { _controller: edcBundle:Default:listarPeliculas }

En el defaultController:
<?php
namespace edcBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use edcBundle\Entity\cineastas;
use edcBundle\Form\cineastasType;
use edcBundle\Entity\peliculas;
use edcBundle\Form\peliculasType;
use edcBundle\Form\peliculasEditType;

use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    public function indexAction($name)
    {
        // return $this->render('edcBundle:Default:index.html.twig', array('name' => $name));
    }
   

    // **************************************************
    public function addCineastaAction(Request $request)
    {
        $cineastaAux = new cineastas();
        $form = $this->createForm(new cineastasType(),$cineastaAux);
        $form->handleRequest($request);
   
        if($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($cineastaAux);
            $em->flush();
            $this->get('session')->getFlashBag()->add(
                    'mensaje','Se ha añadido el cineasta correctamente'
            );
            return $this->redirect($this->generateUrl('listarCineastas'));
        }
   
        return $this->render('edcBundle:Default:addCineasta.html.twig',
                array("form"=>$form->createView()));
    }
   
   
   
    // **************************************************
    public function addPeliculaAction(Request $request)
    {
         $peliculaAux = new peliculas();
        $form = $this->createForm(new peliculasType(),$peliculaAux);
        $form->handleRequest($request);
       
        if($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($peliculaAux);
              $em->flush();
            $this->get('session')->getFlashBag()->add(
                    'mensaje','Se ha añadido la película correctamente'
            );
            return $this->redirect($this->generateUrl('listarPeliculas'));
        }
           return $this->render('edcBundle:Default:addPelicula.html.twig',
                array("form"=>$form->createView()));
    }
   
    // *****************************************
    public function delCineastaAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $cineastaAux = $em->getRepository('edcBundle:cineastas')->find($id);
   
        if (!$cineastaAux) {
            throw $this->createNotFoundException(
                    'No existe el cineasta con el valor:'.$id
            );
        }
   
        $em->remove($cineastaAux);
        $em->flush();
        $this->get('session')->getFlashBag()->add(
                'mensaje',
                'Se ha eliminado el cineasta correctamente'
        );
        return $this->redirect($this->generateUrl('listarCineastas'));
    }
   
    // *****************************************
    public function delPeliculaAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $peliculaAux = $em->getRepository('edcBundle:peliculas')->find($id);
   
        if (!$peliculaAux) {
            throw $this->createNotFoundException(
                    'No existe la película con el valor:'.$id
            );
        }
   
        $em->remove($peliculaAux);
        $em->flush();
        $this->get('session')->getFlashBag()->add(
                'mensaje',
                'Se ha eliminado la película correctamente'
        );
        return $this->redirect($this->generateUrl('listarPeliculas'));
    }
   
    // *******************************************
    public function editCineastaAction($id,Request $request)
    {
        $cineastaAux = new cineastas();
       
        $datos = $this->getDoctrine()
        ->getRepository('edcBundle:cineastas')
        ->find($id);
        if (!$datos) {
            throw $this->createNotFoundException(
                    'No existe el cineasta con el valor:'.$id
            );
        }
       
         $form = $this->createForm(new CineastasType(), $datos);
        $form->handleRequest($request);
       
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            //$em->persist($p);
            $em->flush();
            $this->get('session')->getFlashBag()->add(
                    'mensaje',
                    'Se ha modificado el cineasta correctamente'
            );
            return $this->redirect($this->generateUrl('listarCineastas'));
        }
        return $this->render('edcBundle:Default:editCineasta.html.twig',array("form"=>$form->createView()));
    }
   
    // *******************************************
    public function editPeliculaAction($id,Request $request)
    {
        $peliculaAux = new peliculas();
   
        $datos = $this->getDoctrine()
            ->getRepository('edcBundle:peliculas')
            ->find($id);
        if (!$datos) {
            throw $this->createNotFoundException(
                    'No existe la película con el id:'.$id
            );
        }
       
        $peliculasType = new peliculasEditType($this->getDoctrine()->getManager());
        // Forzar a que en los combos queden seleccionada el item correspondiente
           $peliculasType->setSelected('idDirector', $datos->getIdDirector());
           $peliculasType->setSelected('idActor1', $datos->getIdActor1());
           $peliculasType->setSelected('idActor2', $datos->getIdActor2());
                     
        $form = $this->createForm($peliculasType, $datos);
        $form->handleRequest($request);
   
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
             //$em->persist($p);
            $em->flush();
            $this->get('session')->getFlashBag()->add(
                    'mensaje',
                    'Se ha modificado la película correctamente'
            );
            return $this->redirect($this->generateUrl('listarPeliculas'));
        }
        return $this->render('edcBundle:Default:editPelicula.html.twig',array("form"=>$form->createView()));
    }
   
    // *******************************************
    public function getNombreCineasta($id) {
        $em = $this->getDoctrine()->getManager();
        $cineastaAux = $em->getRepository('edcBundle:cineastas')->find($id);
        return $cineastaAux->getNombre();
    }
   
    // **************************************
    public function listarCineastasAction()
    {
        $datos = $this->getDoctrine()
        /*
         ->getRepository('edcBundle:cineastas')
        ->findAll();
        */
        // Si queremos una SQL más especifica entonces en vez de findAll:
        ->getRepository('edcBundle:cineastas')
        ->createQueryBuilder('c')
        ->where('c.nombre LIKE :nombre1')
        ->orWhere('c.nombre LIKE :nombre2')
        ->andWhere('c.id >0')
        ->setParameter('nombre1', '%a%')
        ->setParameter('nombre2', '%b%')
        ->orderBy('c.nombre', 'ASC')
        ->getQuery()
        ->getResult();
        return $this->render('edcBundle:Default:listarCineastas.html.twig',compact("datos"));
    }
   
    // **************************************
    public function listarPeliculasAction()
    {
        $datos = $this->getDoctrine()
             ->getRepository('edcBundle:peliculas')
            ->findAll();
       
        // Crear array auxiliar para que en los listados muestre los nombres y no los id
        $arrCineastas = array();
        foreach ($datos as $clave => $valor) {
            $idCineasta = $valor->getIdDirector();
            $nomDirector = $this->getNombreCineasta($idCineasta);
            $idCineasta = $valor->getIdActor1();
            $nomActor1 = $this->getNombreCineasta($idCineasta);
            $idCineasta = $valor->getIdActor2();
            $nomActor2 = $this->getNombreCineasta($idCineasta);
           
            $arrAux = array("nomDirector"=>$nomDirector, "nomActor1"=>$nomActor1,"nomActor2"=>$nomActor2);
            $arrCineastas[$valor->getId()] = $arrAux;
        }
 
   
        return $this->render('edcBundle:Default:listarPeliculas.html.twig',
                array("arrDatos"=>$datos, "arrCineastas"=>$arrCineastas));
    }
 }

No hay comentarios:

Publicar un comentario