I am new to the Symfony 2 web framework, and am struggling with a very basic validation task. I have an entity model Post
that has a member slug
, which I use to build the link to the post. In Post.orm.yml
I defined unique: true
and want to include this constraint as a validator as well.
I have created a 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
The creation function in my controller is quite 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(),
)
);
}
The basic pageflow works fine, I can add posts and see them, but if I duplicate a post title to test my validation, it throws an exception: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'duplicate-slug' for key 'UNIQ_FAB8C3B3989D9B62'
. I have been scanning through documentation for quite some time now, but I was not able to find out why my $form->isValid()
returns true
.
Did you enable validation in app/config/config.yml ?
...
framework:
...
validation: { enabled: true }
...
...
and if you want to define validation with annotations too, you have to both enable validation and annotation validation :
...
framework:
...
validation: { enabled: true, enable_annotations: true }
...
...
And then don't forget clear the app/cache
directory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With