Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Symfony: Comment valider dynamiquement de la donnée

Symfony: Comment valider dynamiquement de la donnée

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

September 30, 2021
Tweet

Transcript

  1. Symfony: Comment valider dynamiquement de la donnée AFSY SfPots -

    Septembre 2021 - Paris Grégoire Pineau - @lyrixx Dev @JoliCode Core Team @Symfony
  2. Le retour des SF Pots !!! 🍻🍻🍻

  3. Rappel(s) sur le composant Validator

  4. Les différentes contraintes • Les contraintes “natives” • Les contraintes

    “inlines” • Les contraintes “externes”
  5. Les contraintes natives

  6. Les contraintes “natives”

  7. Les contraintes “inlines”

  8. Les contraintes “inlines” • Elles permettent de coder rapidement une

    contrainte • Mais elles ne sont pas réutilisables • Et c’est compliqué d’utiliser des dépendances
  9. Les contraintes “externes”

  10. Les contraintes “externes” • Elles sont un peu plus longues

    à mettre en place • Cependant le MakerBundle fait (presque) tout pour nous • Mais elles sont réutilisables • Et on peut utiliser des dépendances • Et elles sont plus facilement testables
  11. Données dynamiques ?

  12. Use case

  13. Validation via une callback (1)

  14. Validation via une callback (2)

  15. Validation via une callback (3)

  16. Réutilisabilité & Design

  17. Réutilisabilité & Design • Le code fut rapide à écrire

    • Mais il n’est pas réutilisable • Si il y a beaucoup de type, la classe va grossir très / trop vite • Le code devient pénible à tester et maintenir ⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇ ⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇ • Contraintes externes • DIC
  18. Une interface pour les gouverner tous

  19. Exemple

  20. Le validateur (1)

  21. Le validateur (2)

  22. De la glue dans le container

  23. Conclusion

  24. Conclusion • $context->getValidator()->inContext($context) • Placer le code dans une contrainte

    externe est plus maintenable • Et plus réutilisable • Et plus testable • Avec _instanceof et !tagged_locator tout devient automatique • default_index_method permet de découpler la classe du type
  25. Conclusion (2) Si vous pouvez, utilisez des objets à la

    place d’un tableau non typé. Voir DiscriminatorMap du serializer Plus d’info sur le blog de JoliCode
  26. Merci beaucoup 👋🍻🍕💛