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

Valider dynamiquement de la donnée avec Symfony

Valider dynamiquement de la donnée avec Symfony

Symfony Live Paris - Avril 2022

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

    View Slide

  2. Hello World 👋
    Marion Hurteau
    @MarionHerisson
    /MarionLeHerisson
    📧 [email protected]
    󰠈 Architecture Logicielle @ESGI
    󰠁 JoliCode depuis 2019
    2

    View Slide

  3. Hello World 👋
    󰴛 Nessie & Oscar 🐈
    🌱 ~40 plantes
    🖥💻 RPG
    3

    View Slide

  4. La Validation ?
    4

    View Slide

  5. 5

    View Slide

  6. Principe
    Objet
    Contrainte
    Validateur
    6

    View Slide

  7. Principe
    Objet
    Contrainte
    Validateur

    Violation[ ]

    Violation[...]
    7

    View Slide

  8. Contrainte
    Validateur
    Entité
    Contrainte
    Validateur
    8

    View Slide

  9. Violations ?
    9

    View Slide

  10. Les contraintes
    10

    View Slide

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

    View Slide

  12. Il en existe beaucoup !
    Email, Regex
    Url, Hostname, Ip
    CssColor
    NotCompromisedPassword
    12

    View Slide

  13. Il en existe beaucoup !
    Date, DateTime, Time, Timezone
    Choice
    Language, Locale, Country
    File, Image
    13

    View Slide

  14. Il en existe beaucoup !
    Bic, Ibn, CardScheme
    Isbn, Issn, Isin
    All, AtLeastOneOf, Sequentially
    14

    View Slide

  15. Il en existe beaucoup !
    Compound
    15

    View Slide

  16. Il en existe beaucoup !
    Compound
    Callback
    16

    View Slide

  17. Il en existe beaucoup !
    Compound
    Callback
    Expression
    17

    View Slide

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

    View Slide

  19. Aller un peu plus loin
    19

    View Slide

  20. UniqueEntity
    20

    View Slide

  21. Auto-mapping validation
    21

    View Slide

  22. Auto-mapping validation
    22

    View Slide

  23. Différentes manières de valider
    23

    View Slide

  24. Sur une propriété
    24

    View Slide

  25. Dans un formulaire
    25

    View Slide

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

    View Slide

  27. Sur une classe entière
    27

    View Slide

  28. Sur une classe entière
    28

    View Slide

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

    View Slide

  30. Groupes de validation
    30

    View Slide

  31. Validation personnalisée
    31

    View Slide

  32. Contrainte personnalisée
    32

    View Slide

  33. Contrainte personnalisée
    Une contrainte
    Un validateur
    33

    View Slide

  34. Contrainte personnalisée
    34

    View Slide

  35. Contrainte personnalisée
    35

    View Slide

  36. Dynamiques ?
    36

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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


    View Slide

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


    View Slide

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



    View Slide

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

    View Slide

  46. Cas d’utilisation
    46

    View Slide

  47. Cas d’utilisation
    47

    View Slide

  48. Avec une Callback
    48

    View Slide

  49. Dans le controller
    49

    View Slide

  50. L’entité
    50

    View Slide

  51. Les contraintes dans l’entité
    51

    View Slide

  52. Les contraintes dans l’entité
    52

    View Slide

  53. Les contraintes dans l’entité
    53

    View Slide

  54. Les contraintes dans l’entité
    54

    View Slide

  55. Les contraintes dans l’entité
    55

    View Slide

  56. La callback (1/2)
    56

    View Slide

  57. La callback (2/2)
    57

    View Slide

  58. La callback (2/2)
    58

    View Slide

  59. ExecutionContextInterface ?
    59

    View Slide

  60. Design
    👍 Rapide
    60

    View Slide

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

    View Slide

  62. 62

    View Slide

  63. Design
    👉 Externaliser les contraintes
    👉 DIC
    63

    View Slide

  64. Avec des contraintes externes
    64

    View Slide

  65. La Constraint
    65

    View Slide

  66. La Constraint
    66

    View Slide

  67. Ajoutons une interface ✨
    67

    View Slide

  68. Définition d’un type
    68

    View Slide

  69. Définition d’un type
    69

    View Slide

  70. On ajoute des tags
    70

    View Slide

  71. ContainerInterface
    71

    View Slide

  72. Le ConstraintValidator (1/2)
    72

    View Slide

  73. Le ConstraintValidator (2/2)
    73

    View Slide

  74. 74

    View Slide

  75. 75
    D’autres cas d’utilisation

    View Slide

  76. TL;DR:
    👉 Validez !
    ✨ $context->getValidator()->inContext($context)
    👉 Contrainte externe :
    - Maintenable
    - Testable
    - Réutilisable
    👉 _instanceof & !tagged_locator
    - + default_index_method
    76

    View Slide

  77. Et ensuite ?
    ✅ Validées
    👉 Persister
    Avec Doctrine ?
    En json ?
    77

    View Slide

  78. Merci !
    github.com/MarionLeHerisson/validation
    78

    View Slide

  79. Des questions ?
    github.com/MarionLeHerisson/validation
    @MarionHerisson
    [email protected]
    79

    View Slide