2012-09-26 13 views
14

Soy nuevo en el framework web de Symfony 2 y estoy luchando con una tarea de validación muy básica. Tengo un modelo de entidad Post que tiene un miembro slug, que utilizo para construir el enlace a la publicación. En Post.orm.yml definí unique: true y también quiero incluir esta restricción como validador.Se ignora el archivo de validación YML

He creado un archivo validation.yml:

# src/OwnBundles/BlogpostBundle/Resources/config/validation.yml 

OwnBundles\BlogpostBundle\Entity\Post: 
    properties: 
     slug: 
      - NotBlank: ~ 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: slug 

La función de creación en mi controlador es bastante simple:

public function addAction(Request $request) 
{ 
    $post = new Post(); 
    $form = $this->createForm(new PostType(), $post); 

    if($request->getMethod() == 'POST') 
    { 
     $form->bind($request); 
     if($form->isValid()) 
     { 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($post); 
      $em->flush(); 
      return $this->redirect(
       $this->generateUrl('own_bundles_blogpost_homepage') 
      ); 
     } 
    } 
    return $this->render(
     'OwnBundlesBlogpostBundle:Default:add.html.twig', 
     array(
      'title' => 'Add new blogpost', 
      'form' => $form->createView(), 
     ) 
    ); 
} 

El pageflow básica funciona bien, puedo añadir mensajes y verlos, pero si duplico un título de la publicación para probar mi validación, arroja una excepción: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'. He estado escaneando la documentación durante bastante tiempo, pero no pude averiguar por qué mi $form->isValid() devuelve true.

Respuesta

33

¿Habilita la validación en app/config/config.yml?

... 

framework: 
    ... 
    validation: { enabled: true } 
    ... 

... 

y si se quiere definir la validación con anotaciones también, usted tiene que tanto permiten la validación y la anotación de validación:

... 

framework: 
    ... 
    validation: { enabled: true, enable_annotations: true } 
    ... 

... 

Y entonces no se olvide borrar el directorio app/cache.

+1

mi config.yml dice: 'framework: validation: {enable_annotaciones: true}'; Supuse que esto permite la validación, y estaba equivocado ... Gracias por la ayuda rápida, no sé por qué no pude encontrar esto. – nijansen

+0

Tiene que usar ambos parámetros si quiere usar anotaciones también. Edité mi respuesta. – AlterPHP

+0

Gracias, he actualizado mi configuración en consecuencia. Ahora funciona como un encanto! – nijansen

Cuestiones relacionadas