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

Valider dynamiquement de la donnée avec Symfony

Valider dynamiquement de la donnée avec Symfony

Symfony Live Paris - Avril 2022

Afa7d9b3759a3d0c934966e7f19421fc?s=128

Marion Hurteau

April 07, 2022
Tweet

More Decks by Marion Hurteau

Other Decks in Programming

Transcript

  1. Valider dynamiquement de la donnée avec Symfony Marion Hurteau github.com/MarionLeHerisson/validation

    1
  2. Hello World 👋 Marion Hurteau @MarionHerisson /MarionLeHerisson 📧 mhurteau@jolicode.com 󰠈

    Architecture Logicielle @ESGI 󰠁 JoliCode depuis 2019 2
  3. Hello World 👋 󰴛 Nessie & Oscar 🐈 🌱 ~40

    plantes 🖥💻 RPG 3
  4. La Validation ? 4

  5. 5

  6. Principe Objet Contrainte Validateur 6

  7. Principe Objet Contrainte Validateur ✅ Violation[ ] ❌ Violation[...] 7

  8. Contrainte Validateur Entité Contrainte Validateur 8

  9. Violations ? 9

  10. Les contraintes 10

  11. Il en existe beaucoup ! Blank, NotBlank IsNull, NotNull IsTrue,

    IsFalse Type, Length 11
  12. Il en existe beaucoup ! Email, Regex Url, Hostname, Ip

    CssColor NotCompromisedPassword 12
  13. Il en existe beaucoup ! Date, DateTime, Time, Timezone Choice

    Language, Locale, Country File, Image 13
  14. Il en existe beaucoup ! Bic, Ibn, CardScheme Isbn, Issn,

    Isin All, AtLeastOneOf, Sequentially 14
  15. Il en existe beaucoup ! Compound 15

  16. Il en existe beaucoup ! Compound Callback 16

  17. Il en existe beaucoup ! Compound Callback Expression 17

  18. Il en existe beaucoup ! Compound Callback Expression Valid 18

  19. Aller un peu plus loin 19

  20. UniqueEntity 20

  21. Auto-mapping validation 21

  22. Auto-mapping validation 22

  23. Différentes manières de valider 23

  24. Sur une propriété 24

  25. Dans un formulaire 25

  26. Sur une méthode (un getter ou autre) 26

  27. Sur une classe entière 27

  28. Sur une classe entière 28

  29. Dans mon code Lors d’un submit Quand ? 29

  30. Groupes de validation 30

  31. Validation personnalisée 31

  32. Contrainte personnalisée 32

  33. Contrainte personnalisée Une contrainte Un validateur 33

  34. Contrainte personnalisée 34

  35. Contrainte personnalisée 35

  36. Dynamiques ? 36

  37. Attends, c’est quoi un Pokémon ? 37

  38. Attends, c’est quoi un Pokémon ? plante feu eau 38

  39. Attends, c’est quoi un Pokémon ? niv. 18 niv. 36

    39
  40. Attends, c’est quoi un Pokémon ? 40

  41. Attends, c’est quoi un Pokémon ? 41

  42. Attends, c’est quoi un Pokémon ? 42

  43. Attends, c’est quoi un Pokémon ? 43

  44. niv. 18 niv. 36 Cas d’utilisation 44

  45. Cas d’utilisation POST /evolution/create 45

  46. Cas d’utilisation 46

  47. Cas d’utilisation 47

  48. Avec une Callback 48

  49. Dans le controller 49

  50. L’entité 50

  51. Les contraintes dans l’entité 51

  52. Les contraintes dans l’entité 52

  53. Les contraintes dans l’entité 53

  54. Les contraintes dans l’entité 54

  55. Les contraintes dans l’entité 55

  56. La callback (1/2) 56

  57. La callback (2/2) 57

  58. La callback (2/2) 58

  59. ExecutionContextInterface ? 59

  60. Design 👍 Rapide 60

  61. Design 👍 Rapide 👎 Réutilisabilité 👎 Taille de la méthode

    / classe 👎 Testabilité 61
  62. 62

  63. Design 👉 Externaliser les contraintes 👉 DIC 63

  64. Avec des contraintes externes 64

  65. La Constraint 65

  66. La Constraint 66

  67. Ajoutons une interface ✨ 67

  68. Définition d’un type 68

  69. Définition d’un type 69

  70. On ajoute des tags 70

  71. ContainerInterface 71

  72. Le ConstraintValidator (1/2) 72

  73. Le ConstraintValidator (2/2) 73

  74. 74

  75. 75 D’autres cas d’utilisation

  76. TL;DR: 👉 Validez ! ✨ $context->getValidator()->inContext($context) 👉 Contrainte externe :

    - Maintenable - Testable - Réutilisable 👉 _instanceof & !tagged_locator - + default_index_method 76
  77. Et ensuite ? ✅ Validées 👉 Persister Avec Doctrine ?

    En json ? 77
  78. Merci ! github.com/MarionLeHerisson/validation 78

  79. Des questions ? github.com/MarionLeHerisson/validation @MarionHerisson mhurteau@jolicode.com 79