$30 off During Our Annual Pro Sale. View Details »

Symfony: Comment valider dynamiquement de la donnée

Symfony: Comment valider dynamiquement de la donnée

Grégoire Pineau

September 30, 2021
Tweet

More Decks by Grégoire Pineau

Other Decks in Programming

Transcript

  1. Symfony: Comment valider
    dynamiquement de la donnée
    AFSY SfPots - Septembre 2021 - Paris
    Grégoire Pineau - @lyrixx
    Dev @JoliCode
    Core Team @Symfony

    View Slide

  2. Le retour des SF Pots !!! 🍻🍻🍻

    View Slide

  3. Rappel(s) sur le composant Validator

    View Slide

  4. Les différentes contraintes
    ● Les contraintes “natives”
    ● Les contraintes “inlines”
    ● Les contraintes “externes”

    View Slide

  5. Les contraintes natives

    View Slide

  6. Les contraintes “natives”

    View Slide

  7. Les contraintes “inlines”

    View Slide

  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

    View Slide

  9. Les contraintes “externes”

    View Slide

  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

    View Slide

  11. Données dynamiques ?

    View Slide

  12. Use case

    View Slide

  13. Validation via une callback (1)

    View Slide

  14. Validation via une callback (2)

    View Slide

  15. Validation via une callback (3)

    View Slide

  16. Réutilisabilité & Design

    View Slide

  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

    View Slide

  18. Une interface pour les gouverner tous

    View Slide

  19. Exemple

    View Slide

  20. Le validateur (1)

    View Slide

  21. Le validateur (2)

    View Slide

  22. De la glue dans le container

    View Slide

  23. Conclusion

    View Slide

  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

    View Slide

  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

    View Slide

  26. Merci beaucoup 👋🍻🍕💛

    View Slide