2012-09-26 20 views
14

Sono nuovo nel framework Web di Symfony 2 e sono alle prese con un'attività di convalida di base. Ho un modello di entità Post con un membro slug, che utilizzo per creare il collegamento al post. In Post.orm.yml ho definito unique: true e voglio includere questo vincolo anche come validatore.Il file di convalida YML viene ignorato

ho creato un file 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 funzione di creazione nel mio controller è abbastanza semplice:

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(), 
     ) 
    ); 
} 

Il pageflow base funziona bene, posso aggiungere i messaggi e vederli, ma se duplica il titolo di un post per testare la mia convalida, genera un'eccezione: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'. Ho eseguito la scansione della documentazione per un po 'di tempo, ma non sono stato in grado di scoprire perché il mio $form->isValid() restituisce true.

risposta

33

Hai abilitato la convalida in app/config/config.yml?

... 

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

... 

e se si vuole definire la convalida con annotazioni troppo, si deve sia abilitare la convalida e annotazione di convalida:

... 

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

... 

E poi non dimenticate cancellare la directory app/cache.

+1

my config.yml dice: 'framework: validation: {enable_annotations: true}'; ho pensato che questo consentisse la convalida - e ho sbagliato ... Grazie per l'aiuto rapido, non so perché non ho potuto trovare questo. – nijansen

+0

Devi usare entrambi i parametri se vuoi usare anche le annotazioni. Ho modificato la mia risposta. – AlterPHP

+0

Grazie, ho aggiornato la mia configurazione di conseguenza. Ora funziona perfettamente. – nijansen

Problemi correlati