ccc

Symfony: Formularios

IMPORTANTE: Algunos comandos del código del formulario solo funciona para Symfony 2.4 o superior.

Para crear un formulario obviamente antes tenemos que tener creadas las entidades y que se hayan generado las correspondientes tablas en la base de datos.

Ejemplo de Crear un formulario para la entidad Peliculas

Desde la consola ejecutar:

php app/console doctrine:generate:form edcpeliculasBundle:cineastas

Esto te creará un fichero llamado cineastasType.php dentro de la carpeta form
Abrirmos ese fichero cineastasType.php y personalizamos el buildForm a nuestro gusto:
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('guardar', 'submit')
        ;
    }


En el routing:
edcpeliculas_formAddCineasta:
    path:     /peliculas/formAddCineasta
    defaults: { _controller: edcpeliculasBundle:Default:formAddCineasta }

En el controller del default:
// *********************************************
    public function formAddCineastaAction(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();

            return $this->redirect($this->generateUrl('edcpeliculas_listarCineastas'));
        }
       
        return $this->render("edcpeliculasBundle:Default:formAddCineasta.html.twig",
                array("formAux"=>$form->createView()));
    }

Vista formAddCineasta.html.twig
{% extends 'edcpeliculasBundle::viewEDC.html.twig' %}

{%  block body %}
    {{ parent() }}
    {# form(formAux) #}
     {#  dump(formAux)  #}
   
         <h1>AÑADIR CINEASTA</h1>
        {{ form_start(formAux) }}
       <p>Nombre cineasta: {{form_widget(formAux.nombre)}}</p>
       <p>
            <hr />
            {{form_widget(formAux.guardar)}}
        </p>
        {{ form_end(formAux) }}
{% endblock %}

En cuanto al proceso para listar las películas sería:
En el routing:
edcpeliculas_listarCineastas:
    path:     /peliculas/listarCineastas
    defaults: { _controller: edcpeliculasBundle:Default:listarCineastas }

En el controller:
// *********************************************
    public function listarCineastasAction()
    {
        $em = $this->getDoctrine()->getManager();
        $repositorio = $em->getRepository('edcpeliculasBundle:cineastas');
        $arrCineastas = $repositorio->findAll();
        return $this->render('edcpeliculasBundle:Default:listarCineastas.html.twig',
                array('cineastas' => $arrCineastas));
    }

En la vista listarCineastas.html.twig:
{% extends 'edcpeliculasBundle::viewEDC.html.twig' %}

{% block body %}
    {{ parent() }}
    <h1>Listado de cineastass</h1>
    {# dump(cineastas) #}
     {% for cineasta in cineastas %}
        <p>
           {{cineasta.nombre}} <br>
        </p>
        <hr>
    {% endfor %}
{% endblock %}

No hay comentarios:

Publicar un comentario