Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How to dynamically validate data with Symfony
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Marion Hurteau
November 18, 2022
Programming
890
0
Share
How to dynamically validate data with Symfony
Symfony Con 2022
Marion Hurteau
November 18, 2022
More Decks by Marion Hurteau
See All by Marion Hurteau
Les chaînes de caractères 101
marionleherisson
0
140
String usage: so many tools are already in your hands!
marionleherisson
1
210
Valider dynamiquement de la donnée avec Symfony
marionleherisson
2
1.1k
La microtypographie au service de la lisibilité
marionleherisson
0
230
Other Decks in Programming
See All in Programming
認証統合から始めるフロントエンドの機能単位開発 — マイクロサービス思想の適用
koukimiura
0
100
Are We Really Coding 10× Faster with AI?
kohzas
0
140
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
330
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
150
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
260
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
130
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
360
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
300
開発とはなにか、Essenceカーネルで見えるもの
ukin0k0
0
110
GoogleCloudとterraform完全に理解した
terisuke
1
190
Claude CodeでETLジョブ実行テストを自動化してみた
yoshikikasama
0
1.2k
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
500
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
240
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
320
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
A designer walks into a library…
pauljervisheath
211
24k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
200
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
My Coaching Mixtape
mlcsv
0
120
Speed Design
sergeychernyshev
33
1.6k
Building the Perfect Custom Keyboard
takai
2
750
Become a Pro
speakerdeck
PRO
31
5.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
550
Transcript
How to dynamically validate data with Symfony Marion Hurteau github.com/MarionLeHerisson/validation
@MarionHerisson / 📧
[email protected]
1
Hello World 👋 Marion Hurteau @MarionHerisson /MarionLeHerisson 📧
[email protected]
Software Engineering @ESGI JoliCode since 2019 2
Hello World 👋 👶 “Disney baby” Nessie & Oscar
🐈 🖥💻 RPG 3
4
Validation ? 5
6
Principle Object Constraint Validator 7
Principle Object Constraint Validator ✅ Violation[ ] ❌ Violation[...] 8
Contrainte Validateur Entity Constraint Validator 9
Violations ? 10
The constraints 11
Gotta catch’em all ! Blank, NotBlank IsNull, NotNull IsTrue, IsFalse
Type, Length 12
Gotta catch’em all ! Email, Regex Url, Hostname, Ip CssColor
NotCompromisedPassword 13
Gotta catch’em all ! Date, DateTime, Time, Timezone Choice Language,
Locale, Country File, Image 14
Gotta catch’em all ! Bic, Ibn, CardScheme Isbn, Issn, Isin
All, AtLeastOneOf, Sequentially 15
Gotta catch’em all ! Compound 16
Gotta catch’em all ! Compound Callback 17
Gotta catch’em all ! Compound Callback Expression 18
Gotta catch’em all ! Compound Callback Expression Valid 19
Going further 20
UniqueEntity 21
Auto-mapping validation 22
Auto-mapping validation 23
Auto-mapping validation 24
Differents ways to validate 25
On a property 26
On a property 27
Inside a Form 28
On a method (a getter or something else) 29
On an entire class 30
On an entire class 31
On an entire class 32
ExecutionContextInterface ? 33
In my code When submitting a form NOT when persisting
When does it happen ? 34
Custom validation 35
Custom constraint 36
Custom constraint A constraint A validator 37
Custom constraint 38
Dynamic ? 39
Wait, what is a Pokemon ? 40
Wait, what is a Pokemon ? plant fire water 41
Wait, what is a Pokemon ? lvl. 18 lvl. 36
42
Wait, what is a Pokemon ? 43
Wait, what is a Pokemon ? 44
Wait, what is a Pokemon? 45
Wait, what is a Pokemon? 46
niv. 18 niv. 36 Use case 47
Use case POST /evolution/create 48
Use case 49
Use case 50
With a Callback 51
Inside the Controller 52
The entity 53
The constraints (in the entity) 54
The constraints (in the entity) 55
The constraints (in the entity) 56
The constraints (in the entity) 57
The constraints (in the entity) 58
The Callback (1/2) 59
The Callback (2/2) 60
Let’s try it ! 61
Let’s try it ! 62
Why is it KO ? 63
Why is it KO ? 64
The Callback (2/2) - Fixed it 65
Let’s try it - again ! 66
Design 👍 Fast 67
Design 👍 Fast 👎 Reusability 👎 Method’s or class size
👎 Testability 68
69
Design 👉 Externalise the constraints 👉 DIC 70
With external constraints 71
The Constraint 72
The Constraint 73
Let’s add an interface ✨ 74
Type definition 75
Type definition 76
Add some tags 77
ServiceLocator 78
The ConstraintValidator (1/2) 79
The ConstraintValidator (2/2) 80
81
TL;DR: 👉 Validate ! ✨ $context->getValidator()->inContext($context) 👉 External constraint :
- Maintainable - Testable - Reusable 👉 _instanceof & !tagged_locator - + default_index_method 82
83 Other use cases
Level up: Conditional Constraints 84
Thank you! @MarionHerisson /MarionLeHerisson/validation 📧
[email protected]
85
Questions? 86 @MarionHerisson /MarionLeHerisson/validation 📧
[email protected]
https://lparchive.org/Pokemon-Emerald-(by-Crosspei ce)/Update%2034/ 87