Un aspecto fundamental a la hora de trabajar con formularios es la validación de los datos que llegan de los mismos. Veamos como validar formularios en Symfony2.
Tenemos este formulario creado.
<?php namespace Pruebas\EjemploBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Doctrine\ORM\EntityRepository; class PostsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('title','text',array("required"=>false, 'attr' => array('class'=>'form-control') )) ->add('description','textarea',array("required"=>false, 'attr' => array('class'=>'form-control') )) ->add('Guardar',"submit",array('attr' => array('class'=>'btn btn-success'))) ; } /** * @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'; } }
Para poder trabajar con la validación es recomendable que en el archivo app/config/config.yml
framework: validation: { enabled: true, enable_annotations: true }
Después tendremos que crear el fichero Resources/config/validation.yml
dentro del directorio de nuestro bundle. En este fichero pondremos todas las reglas de validación asociadas a nuestra entidad, como podemos ver a continuación.
Pruebas\EjemploBundle\Entity\Posts: properties: title: - NotBlank: {message:"El titulo no puede estar vacío"} - Length: min: 5 minMessage: "El titulo debe tener {{ limit }} caracteres de largo" description: - NotBlank: {message:"La descripción no puede estar vacío"}
La acción en el controlador. Recibirá los datos y validará el formulario.
public function formularioAction(Request $request) { //instanciamos la entidad Posts $post = new Posts(); //Creamos el formulario, asociado a la entidad $form = $this->createForm(new PostsType(), $post); //utilizamos el manejador de peticiones $form->handleRequest($request); //Si el formulario ha sido enviado if ($form->isSubmitted()) { //Metemos en variables los datos que llegan desde el formulario $title = $form->get('title')->getData(); $description = $form->get('description')->getData(); //Llamamos a los metodos set de la entidad y les metemos los valores del formulario $post->setTitle($title); $post->setDescription($description); } //Si el formulario es valido tras aplicar la validacion de la entidad if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $persist = $em->persist($post); $flush = $em->flush(); echo "Formulario valido !!!"; } //Se lo pasamos a la vista return $this->render("PruebasEjemploBundle:Default:formulario.html.twig", array( "form" => $form->createView() )); }
La vista.
<div class="col-lg-6"> <h1>Formulario en Symfony2</h1> <form action="" method="post" {{ form_enctype(form) }}> {{ form_widget(form) }} {{ form_errors(form) }} </form> victorroblesweb.es </div>
Más información:
Formularios en Symfony2
Validation Symfony2