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 .
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
Musisz użyć obu parametrów, jeśli chcesz używać także adnotacji. Edytowałem swoją odpowiedź. – AlterPHP
Dzięki, zaktualizowałem moją konfigurację odpowiednio. Teraz działa jak urok. – nijansen