2012-09-26 5 views
14

Je suis nouveau dans le framework web Symfony 2 et je suis aux prises avec une tâche de validation très basique. J'ai un modèle d'entité Post qui a un membre slug, que j'utilise pour créer le lien vers la publication. Dans Post.orm.yml j'ai défini unique: true et je souhaite également inclure cette contrainte en tant que validateur.Le fichier de validation YML est ignoré

J'ai créé un fichier 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 fonction de création dans mon contrôleur est assez 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(), 
     ) 
    ); 
} 

L'enchainement de base fonctionne très bien, je peux ajouter les messages et les voir, mais si je duplique un titre de poste pour tester ma validation, il émet une exception: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'. J'ai parcouru la documentation pendant un certain temps maintenant, mais je n'ai pas pu savoir pourquoi mon $form->isValid() renvoie true.

Répondre

33

Avez-vous activé la validation dans app/config/config.yml?

... 

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

... 

et si vous souhaitez définir la validation avec annotations aussi, vous avez à la fois permettre la validation et la validation annotation:

... 

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

... 

Et puis ne pas oublier effacer le répertoire app/cache.

+1

mon fichier config.yml dit: 'framework: validation: {enable_annotations: true}'; J'ai supposé que cela permet la validation - et je me suis trompé ... Merci pour l'aide rapide, je ne sais pas pourquoi je ne pouvais pas trouver cela. – nijansen

+0

Vous devez utiliser les deux paramètres si vous souhaitez également utiliser les annotations. J'ai édité ma réponse. – AlterPHP

+0

Merci, j'ai mis à jour ma config en conséquence. Maintenant, cela fonctionne comme un charme. – nijansen

Questions connexes