[Symfony] Manier van valideren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

DavY -

DavY -

10/09/2015 13:54:04
Quote Anchor link
In Symfony heb je 2 manieren om te valideren, bijvoorbeeld voor een gebruikersnaam.

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
 
PHP hulp

PHP hulp

23/11/2024 04:38:17
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/09/2015 00:37:18
Quote Anchor link
Hoi Davy,

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($form->isValid()) {
    // ...
}
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public function setEmail($email)
{

    $this->email = strtolower($email);
    return $this;
}
 
DavY -

DavY -

11/09/2015 00:58:22
Quote Anchor link
Hoi Frank,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public static function loadValidatorMetadata(ClassMetadata $metadata)
{

    // ...
}
?>


Op de website van Symfony zelf staat er dat je hiermee valideert in Entity zelf of is dat niet correct?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/09/2015 08:20:17
Quote Anchor link
In Symfony hoef je niet per se annotations te gebruiken. Je kunt je validatie-regels (constraints) ook in YAML wegschrijven bijvoorbeeld. Als je annotations gebruikt dan mag je de loadValidatorMetadata method vergeten omdat je constraints automatisch geladen worden.

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
 
DavY -

DavY -

11/09/2015 11:14:30
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/09/2015 11:31:16
Quote Anchor link
Ik gebruik annotations voor de routing, doctrine en asserts. Alleen voor services en de configuratie gebruik ik yaml. Xml hekelt mij persoonlijk het meest.
 
Richard Snijders

Richard Snijders

11/09/2015 11:31:45
Quote Anchor link
Validatie kan op wel meer manieren, oneindig om precies te zijn. Zelf gebruik ik twee vormen van validatie.

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!
 
DavY -

DavY -

11/09/2015 12:17:04
Quote Anchor link
@Richard,

Bedankt voor je uitleg!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.