2012-09-26 7 views
14

Jestem nowym użytkownikiem w środowisku sieciowym Symfony 2 i zmagam się z bardzo podstawowym zadaniem sprawdzania poprawności. Mam model podmiotu Post, który ma członka slug, którego używam do budowania łącza do wpisu. W Post.orm.yml zdefiniowałem unique: true i chcę uwzględnić to ograniczenie również jako walidator.Plik sprawdzania poprawności YML jest ignorowany

Stworzyłem plik validation.yml:

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

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

Funkcja stworzenie w moim kontroler jest dość prosta:

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

Podstawowym pageflow działa dobrze, mogę dodawać posty i je zobaczyć, ale jeśli powielę tytuł postu, aby przetestować moją walidację, zgłasza wyjątek: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'. Przeglądałem dokumentację od jakiegoś czasu, ale nie byłem w stanie dowiedzieć się, dlaczego mój $form->isValid() zwraca .

Odpowiedz

33

Czy włączyłeś sprawdzanie poprawności w app/config/config.yml?

... 

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

... 

i jeśli chcesz określić walidacji z adnotacjami też trzeba zarówno umożliwienie weryfikacji i walidacji adnotacji:

... 

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

... 

A potem nie zapomnij wyczyścić katalog app/cache.

+1

Mój config.yml mówi: 'framework: validation: {enable_annotations: true}'; Zakładam, że to umożliwia walidację - i myliłem się ... Dzięki za szybką pomoc, nie wiem, dlaczego nie mogłem tego znaleźć. – nijansen

+0

Musisz użyć obu parametrów, jeśli chcesz używać także adnotacji. Edytowałem swoją odpowiedź. – AlterPHP

+0

Dzięki, zaktualizowałem moją konfigurację odpowiednio. Teraz działa jak urok. – nijansen