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
.
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
Devi usare entrambi i parametri se vuoi usare anche le annotazioni. Ho modificato la mia risposta. – AlterPHP
Grazie, ho aggiornato la mia configurazione di conseguenza. Ora funziona perfettamente. – nijansen