Los formularios son un aspecto fundamental dentro del desarrollo de aplicaciones web y por eso es tan importante que un framework nos solucione problemas y nos agilice el trabajo con ellos. Ahora veremos como crear formularios en Symfony2.
En Symfony2 tenemos un comando para casi cualquier cosa, para crear un formulario en Symfony2 tenemos el comando:
php app/console doctrine:generate:form NamespaceDeMiBundle:Entidad
Esto nos generará una clase dentro del directorio Form de nuestro bundle, la cual podremos manipular a nuestro antojo. Por ejemplo yo he añadido un botón de submit y hee definido los tipos de cada campo.
<?php namespace Pruebas\EjemploBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class PostsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title','text') ->add('description','textarea',array("required"=>true)) ->add('submit',"submit") ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Pruebas\EjemploBundle\Entity\Posts' )); } /** * @return string */ public function getName() { return 'pruebas_ejemplobundle_posts'; } }
Esta clase solamente es el modelo del formulario, ahora hay que mostrarlo en la vista.
Vamos a crear un ruta para ello.
formulario: path: /formulario defaults: { _controller: PruebasEjemploBundle:Default:formulario }
Llamamos al formulario en la acción y se lo pasamos a la vista
public function formularioAction(){ $form=$this->createForm(new PostsType()); return $this->render("PruebasEjemploBundle:Default:formulario.html.twig", array( "form"=>$form->createView() )); }
En la vista esto nos imprimirá el formulario completo:
<form action="" method="post" {{ form_enctype(form) }}> {{ form_widget(form) }} {{ form_errors(form) }} </form>
Más información:
Formularios en Symfony2