[Symfony] Manier van valideren
Door middel van @Assert in Entity of in Controller zelf, maar wanneer en of hoe weet ik wanneer het juiste manier is van valideren in Entity of controller zelf? Kan iemand dit in het goed Nederlands uitleggen en zonder bundles svp? Alvast bedankt iig!
Om beetje te uitleggen wat ik bedoel, kun je hiernaartoe gaan:
http://symfony.com/doc/current/reference/constraints.html
Ik kan je vraag enigszins als tweeledig opvatten.
Als je in je Entity de @assert annotation gebruikt dan wordt er nog helemaal niets gevalideerd. Het is slechts 'een instelling' voor de validator. De validator zal dus nog aangeroepen moeten worden alvorens er daadwerkelijk iets gevalideerd wordt. Waar je die validator aanroept is aan jou en heeft alles met logica te maken. Wanneer je Symfony's formbuilder gebruikt (zoals ik die noem) dan gebruik je indirect de validator-service. Je kent deze wel:
Ergens in de achtergrond bij het aanroepen van de isValid Method wordt ook gewoon de validator aan het werk gezet.
Vanuit je controller (of een andere class) kun je dit ook handmatig doen:
Code (php)
1
2
3
4
2
3
4
<?php
$validator = $this->get('validator');
$errors = $validator->validate($entity);
?>
$validator = $this->get('validator');
$errors = $validator->validate($entity);
?>
Verder wordt in de methods van een entity volgens mij nauwelijks gevalideerd omdat een entity een data storage is en omdat het niet de bedoeling is dat de setters van de Entity iets anders terug gaan geven als het Object zelf ( return $this; )
Toevoeging op 11/09/2015 00:45:20:
Wat je wel kunt doen in een entity is je data 'Formatten'. Een klassiek voorbeeld is bijvoorbeeld het e-mailadres omzetten naar uitsluitend kleine letters.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
public function setEmail($email)
{
$this->email = strtolower($email);
return $this;
}
public function setEmail($email)
{
$this->email = strtolower($email);
return $this;
}
Bedankt voor je antwoord en heldere uitleg! Ik kende het inderdaad al van $form->isValid() en wist dat het daarmee pas inging. Nu is het wat meer duidelijk voor mij, ahoewel ik nog een vraagje hebt. Je zegt:
Quote:
Verder wordt in de methods van een entity volgens mij nauwelijks gevalideerd omdat een entity een data storage is en omdat het niet de bedoeling is dat de setters van de Entity iets anders terug gaan geven als het Object zelf ( return $this; )
Maar hoe zit het dan met dit bijvoorbeeld:
Code (php)
Op de website van Symfony zelf staat er dat je hiermee valideert in Entity zelf of is dat niet correct?
Ik vond deze pagina nog: http://test-sf-doc-es.readthedocs.org/en/latest/book/validation.html#validation
Gewijzigd op 11/09/2015 08:20:48 door Frank Nietbelangrijk
Ok, Bedankt voor de uitleg! Ik ben bekend met YAML, maar ik vind php/Annotations toch wat prettiger. Het zal vast wel er ooit van komen in de toekomst.
Ik gebruik annotations voor de routing, doctrine en asserts. Alleen voor services en de configuratie gebruik ik yaml. Xml hekelt mij persoonlijk het meest.
Je kunt bijvoorbeeld in de Entity valideren met behulp van Annotations om ervoor te zorgen dat een Form met entity data de validatie automatisch doorloopt wanneer je handleRequest aanroept. Dat is heel handig om ervoor te zorgen dat de data die je in je Entity stopt ook het formaat heeft wat je wilt opslaan in de database.
Een andere manier is om de validatie in de Form Type zelf te doen (het AbstractType dingetje). Je kunt namelijk aan velden een optie 'constraints' toevoegen met een array van alle validatie constraints. Dit is handig voor formulieren waar standaard geen data aan gekoppeld is, bijvoorbeeld een contactformulier.
Verder kun je validatie constraints ook gewoon in components enzo gebruiken, maar in dat geval heb je er waarschijnlijk een ander doel mee.
Ik hoop dat het zo duidelijk is!
Bedankt voor je uitleg!