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
.
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
Vous devez utiliser les deux paramètres si vous souhaitez également utiliser les annotations. J'ai édité ma réponse. – AlterPHP
Merci, j'ai mis à jour ma config en conséquence. Maintenant, cela fonctionne comme un charme. – nijansen