Je dois valider les données quand on me les présente via l'API, mais aussi via les Controller. Ah mince, je dois encore les valider sur le Client pour plus d'UX ... Hop, je vais copier/coller les règles. Non! Ce n'est pas bien ! Nous allons voir en application avec Laravel comment n'exprimer qu'une seule fois les règles de validation des Models et comment elles seront automatiquement exploitées dans le Back (PHP) et dans le Front (Javascript).
Afup day 2020 tours valider sans copier-coller - cyrille37
1. 1/18Cyrille37 - CCØ - AFUP day Tours 2020
Valider les données
sans copier/coller
AFUP Day 2020 Tours
Cyrille37
KEEP
CALM
and
VALIDATE
2. 2/18Cyrille37 - CCØ - AFUP day Tours 2020
Comme je suis vieux et aigri,
mon vocabulaire pourrait en blaisser certain·e·s
Je vous pris d’avance de m’en excuser
Cyrille37 Afup day 2020 Tours
3. 3/18Cyrille37 - CCØ - AFUP day Tours 2020
Pourquoi valider les données ?
●
Failles de sécurité
– XSS Cross-Site Scripting
– CSRF Cross-Site request forgery
– SQL Injection
●
Règles « métier »
– Longeur de chaîne
– Valeur min/max
– Liste de référence
Qualité et
Assurance
You’ve been
Hacked !
4. 4/18Cyrille37 - CCØ - AFUP day Tours 2020
C’est quoi valider ?
●
Filtrer
– Surrounding spaces
– Format de date
– Format des décimaux
– Encodage des
caractères
●
Vérifier
– Règles de sécurité
– Règles de stockage
– Règles « métier »
– Règles particulières
Et la Timezone ?
9. 9/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « framework web » level 1
HTTP PHP Controller
Framework Web
FormRequest
Model
●
Router / Dispatcher
●
ErrorHandler
●
DI Container
●
Template engine
●
Validation engine
●
ORM
●
Event / Job / Queue...
is a great framework
10. 10/18Cyrille37 - CCØ - AFUP day Tours 2020
Méthode « framework web » level 1
class PersonFormRequest {
public function rules() {
return [
'name' => 'required|unique:persons|max:255',
];
}
}
public function recordPerson( PersonFormRequest $req )
{
$p = new Person( $req->all ) ;
$p→save() ;
return redirect(‘view.ok’);
}
Validation gérée via une classe « FormRequest »
que l’on utilise dans le controller
Les messages d’erreur
sont fournis par la brique
« validation » du framework
PersonFormRequest est injectée
par le « container DI »
après avoir été validée
11. 11/18Cyrille37 - CCØ - AFUP day Tours 2020
Le problème
HTTP PHP Framework
FormRequest
Model
FormRequest
FormRequest
Controller
Controller
Controller
Risque de perte
de cohérence
des règles !
12. 12/18Cyrille37 - CCØ - AFUP day Tours 2020
Le problème devient chaos
HTTP PHP Framework FormRequest
Model
FormRequest
FormRequest
Controller
Controller
Controller
Risque de perte
de cohérence
des règles !
PHP Framework
MQ
Cron
HTML
Javascript
13. 13/18Cyrille37 - CCØ - AFUP day Tours 2020
Solution CRUD en SQL
DB
PHP
C#
Java
Presta A
Presta X
Presta Z
La validation des données
est garantie dans la base
de donnée par des
procédures stockées
Les règles de validation sont
transmises aux prestataires via
des documents (SFD, CCTP, ...)
14. 14/18Cyrille37 - CCØ - AFUP day Tours 2020
Class « Service »
Service
Controller
Model
Model
Encapsuler les opérations « métier » dans une classe de service
qui gèrera les modifications des models au sein d’une transaction
Service DB commit DB rollback
Command
Event
Solus
level2
Solus
level2
15. 15/18Cyrille37 - CCØ - AFUP day Tours 2020
Validation au plus proche
de l’ORM
Model
ORM
Extension
Validation
Les règles de validation
sont exprimées au plus
près du « Model »
Exceptions
Serialization
(Array, Json)
Localization
Présentation
Extension
Validation
Framework
Solus
level2
Solus
level2
16. 16/18Cyrille37 - CCØ - AFUP day Tours 2020
Avec Laravel
Version 5 au moins
Back Front
●
laravel.com
●
jqueryvalidation.org/
●
github.com/proengsoft/laravel-jsvalidation
●
github.com/esensi/model
Model
esensi/model
Controler
proengsoft/laravel-jsvalidation
17. 17/18Cyrille37 - CCØ - AFUP day Tours 2020
En live
framagit.org / Cyrille37 / laravel-esensi-example
●
laravel.com
●
jqueryvalidation.org/
●
github.com/proengsoft/laravel-jsvalidation
●
github.com/esensi/model
18. 18/18Cyrille37 - CCØ - AFUP day Tours 2020
●
Ne réinvente pas la roue
●
Étudie, contribue et partage
●
Les logiciels libres sont tes amis