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
Marion Hurteau
November 18, 2022
Programming
910
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
220
Valider dynamiquement de la donnée avec Symfony
marionleherisson
2
1.1k
La microtypographie au service de la lisibilité
marionleherisson
0
250
Other Decks in Programming
See All in Programming
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
340
源内ハンズオン概要編
hideg
0
130
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
210
プロポーザルを書いてもらう
pvcresin
0
290
仕様駆動開発の消費期限
watany
16
7.3k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
450
継続モナドとリアクティブプログラミング
yukikurage
3
690
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
260
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
Go 1.27 における memory allocation の高速化
andpad
0
110
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Deep Space Network (abreviated)
tonyrice
0
250
KATA
mclloyd
PRO
35
15k
sira's awesome portfolio website redesign presentation
elsirapls
0
320
The Art of Programming - Codeland 2020
erikaheidi
57
14k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
450
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
We Have a Design System, Now What?
morganepeng
55
8.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
630
Are puppies a ranking factor?
jonoalderson
1
3.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
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