Symfony Live Paris - Avril 2022
Valider dynamiquement de ladonnée avec SymfonyMarion Hurteaugithub.com/MarionLeHerisson/validation1
View Slide
Hello World 👋Marion Hurteau@MarionHerisson/MarionLeHerisson📧 [email protected] Architecture Logicielle @ESGI JoliCode depuis 20192
Hello World 👋 Nessie & Oscar 🐈🌱 ~40 plantes🖥💻 RPG3
La Validation ?4
5
PrincipeObjetContrainteValidateur6
PrincipeObjetContrainteValidateur✅Violation[ ]❌Violation[...]7
ContrainteValidateurEntitéContrainteValidateur8
Violations ?9
Les contraintes10
Il en existe beaucoup !Blank, NotBlankIsNull, NotNullIsTrue, IsFalseType, Length11
Il en existe beaucoup !Email, RegexUrl, Hostname, IpCssColorNotCompromisedPassword12
Il en existe beaucoup !Date, DateTime, Time, TimezoneChoiceLanguage, Locale, CountryFile, Image13
Il en existe beaucoup !Bic, Ibn, CardSchemeIsbn, Issn, IsinAll, AtLeastOneOf, Sequentially14
Il en existe beaucoup !Compound15
Il en existe beaucoup !CompoundCallback16
Il en existe beaucoup !CompoundCallbackExpression17
Il en existe beaucoup !CompoundCallbackExpressionValid18
Aller un peu plus loin19
UniqueEntity20
Auto-mapping validation21
Auto-mapping validation22
Différentes manières de valider23
Sur une propriété24
Dans un formulaire25
Sur une méthode (un getter ou autre)26
Sur une classe entière27
Sur une classe entière28
Dans mon codeLors d’un submitQuand ?29
Groupes de validation30
Validation personnalisée31
Contrainte personnalisée32
Contrainte personnaliséeUne contrainteUn validateur33
Contrainte personnalisée34
Contrainte personnalisée35
Dynamiques ?36
Attends, c’est quoi un Pokémon ?37
Attends, c’est quoi un Pokémon ?plante feu eau38
Attends, c’est quoi un Pokémon ?niv. 18 niv. 3639
Attends, c’est quoi un Pokémon ?40
Attends, c’est quoi un Pokémon ?41
Attends, c’est quoi un Pokémon ?42
Attends, c’est quoi un Pokémon ?43
niv. 18niv. 36Cas d’utilisation44
Cas d’utilisationPOST /evolution/create45
Cas d’utilisation46
Cas d’utilisation47
Avec une Callback48
Dans le controller49
L’entité50
Les contraintes dans l’entité51
Les contraintes dans l’entité52
Les contraintes dans l’entité53
Les contraintes dans l’entité54
Les contraintes dans l’entité55
La callback (1/2)56
La callback (2/2)57
La callback (2/2)58
ExecutionContextInterface ?59
Design👍 Rapide60
Design👍 Rapide👎 Réutilisabilité👎 Taille de la méthode / classe👎 Testabilité61
62
Design👉 Externaliser les contraintes👉 DIC63
Avec des contraintes externes64
La Constraint65
La Constraint66
Ajoutons une interface ✨67
Définition d’un type68
Définition d’un type69
On ajoute des tags70
ContainerInterface71
Le ConstraintValidator (1/2)72
Le ConstraintValidator (2/2)73
74
75D’autres cas d’utilisation
TL;DR:👉 Validez !✨ $context->getValidator()->inContext($context)👉 Contrainte externe :- Maintenable- Testable- Réutilisable👉 _instanceof & !tagged_locator- + default_index_method76
Et ensuite ?✅ Validées👉 PersisterAvec Doctrine ?En json ?77
Merci !github.com/MarionLeHerisson/validation78
Des questions ?github.com/MarionLeHerisson/validation@MarionHerisson[email protected]79