Validar formularios en Symfony2

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

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post