Apprendre à développer des applications web avec PHP et Symfony
2e édition
Editions ENI
Avant-propos
Chapitre 1
Qu'est-ce qu'un bon développeur ?
1. Développer des applications web avec PHP et Symfony13
Chapitre 2
La boite à outils
1. Windows, Mac OS ou Linux ?17
1.1 Windows18
1.2 Linux18
1.3 Mac OS19
2. La relation client-serveur20
3. Le serveur local22
4. Visual Studio Code27
Chapitre 3
Le langage PHP
1. Comment écrire du PHP ?35
2. Les bases du langage : votre premier Hello World !37
3. Les variables en PHP39
4. Les déclarations de type en PHP42
5. Les structures de contrôle44
5.1 La structure de contrôle if44
5.2 Variable booléenne49
5.3 Structure de contrôle foreach50
5.4 Opérateur ternaire54
6. Les fonctions PHP55
6.1 Paramètres d'une fonction57
6.2 Valeurs par défaut des paramètres60
6.3 Retour de fonction61
6.4 Le typage des fonctions63
6.4.1 Le typage des paramètres63
6.4.2 Le typage du retour de la fonction65
Chapitre 4
Le langage Objet
1. Introduction69
2. Des objets en programmation69
3. Les classes70
4. Les objets72
5. Les propriétés et les méthodes d'un objet75
6. Pourquoi le langage est-il dit objet ?76
7. L'objet Sthis76
8. Les méthodes magiques82
8.1 La méthode toString()82
8.2 Les méthodes get () et set() : portée des éléments84
8.3 Les méthodes construct et destruct91
9. Les espaces de noms95
9.1 Un espace de noms, pour quoi faire ?98
10. L'héritage de classe104
11. La signature d'une méthode107
12. Redéfinition d'une méthode109
13. Portée des éléments dans les classes filles111
14. Redéfinition du constructeur de la classe mère112
15. Les constantes et les variables « static »116
15.1 Les constantes116
15.2 Les variables « static »118
16. Les classes abstraites et les interfaces121
16.1 Les classes abstraites121
16.2 Les interfaces126
17. Conclusion128
Chapitre 5
Les nouveautés en PHP 8
1. Un zeste d'asynchrone : les fibres en PHP 8129
2. Les autres nouveautés intéressantes en PHP 8139
2.1 Les arguments nommés139
2.2 Liste d'arguments à nombre variable140
2.3 Déclaration de propriétés dans le constructeur d'une classe141
2.4 Opérateur null sécurisé142
2.5 Les chaînes de caractères (string)143
2.6 Les types Union143
2.7 Expression match144
2.8 Autres améliorations144
Chapitre 6
Les frameworks
1. Un framework : pour quoi faire ?145
1.1 Quels sont les avantages ?145
1.2 Quels sont les inconvénients ?146
2. Les frameworks PHP147
3. Le framework Symfony148
3.1 Présentation du framework148
3.2 La documentation150
Chapitre 7
Les outils de gestion de dépendances
1. Introduction153
2. Le gestionnaire de dépendances Composer154
3. Variables d'environnement156
4. Installation de Composer160
5. Utilisation de Composer162
6. Le gestionnaire de dépendances Scoop169
Chapitre 8
Installation de Symfony
1. La bonne configuration173
2. L'installation de l'installeur !174
3. L'installation de votre projet Symfony175
4. L'installation de Symfony avec Composer176
5. L'installation d'une application Symfony allégée177
6. Le test de l'installation177
7. Le serveur local de Symfony178
Chapitre 9
Configurer une application
1. Le fichier .env181
1.1 Remplacement des variables d'environnement en local184
1.2 La création d'une nouvelle configuration185
Chapitre 10
Une première application
1. La structure de Symfony187
2. Les contrôleurs188
3. Les vues191
4. Le dossier public194
5. Le dossier var195
6. Le dossier vendor195
7. Les autres fichiers de l'application196
8. Les composants de HttpFoundation196
9. L'objet Request197
10. L'objet Response203
11. Les variables de session210
11.1 L'utilité des variables de session210
11.2 L'utilisation des variables de session sous Symfony211
11.3 Les Flash Bags214
Chapitre 11
Le routage
1. Organisation de l'application217
2. Intérêt des routes218
3. Routes sans annotations219
4. Verbes des routes220
5. Paramètres des routes221
6. Paramètres conditionnels222
7. Validation des paramètres222
8. Liste des routes224
Chapitre 12
Le moteur de template Twig
1. La syntaxe225
2. L'héritage228
3. L'inclusion de vue232
4. L'utilisation des variables d'environnement233
5. Les sessions et les Flash Bags dans Twig235
5.1 Les variables de session235
5.2 Les Flash Bags235
6. L'inclusion du CSS et du JavaScript dans une vue238
7. L'utilisation des routes dans la vue241
8. Les filtres et les fonctions244
8.1 Les filtres244
8.2 Les fonctions248
Chapitre 13
Webpack Encore
1. Introduction251
2. Utilisation de Sass254
3. Utilisation de Vue.js258
4. Utilisation de app.css et app.js dans les vues260
Chapitre 14
Symfony UX Stimulus
1. Introduction263
2. Symfony UX264
2.1 Principe de Symfony UX264
2.2 Comment fonctionne Symfony UX pour installer les packages ?265
2.3 Comment installer Symfony UX ?266
2.4 Comment installer un composant Symfony UX ?266
3. Symfony Stimulus268
3.1 Comment utiliser Stimulus pour utiliser un composant ?268
3.2 Comment utiliser Stimulus pour appliquer un composant ?268
3.3 Symfony UX Stimulus avec React275
4. HotWire et Turbo279
4.1 Introduction279
4.2 Le principe de HotWire281
4.3 Symfony UX Turbo282
Chapitre 15
La couche modèle avec Doctrine
1. Introduction287
2. Les bases de données287
3. Le langage SQL288
4. L'ORM de Symfony : Doctrine289
5. Les entités291
6. Les migrations296
7. Les fixtures299
8. La récupération des données à partir de la base304
9. Les méthodes du Repository315
10. Le langage DQL316
11. Le Query Builder319
12. L'exécution des requêtes SQL322
13. L'écriture d'une requête SQL et l'obtention des objets mappés323
14. Les relations entre entités324
15. Les relations OneToOne326
16. Les relations ManyToMany332
17. Les relations bidirectionnelles339
18. Les relations bidirectionnelles avec attributs343
19. Le Lazy Loading344
20. Le Reverse Engineering347
Chapitre 16
Les formulaires
1. Introduction349
2. Form Builder350
3. Formulaires externalisés356
3.1 Définition356
3.2 Utilisation du formulaire externe360
4. Personnalisation de l'affichage d'un formulaire362
5. Traitement des données du formulaire367
6. Récupération des données de l'entité par défaut373
7. Ajout des boutons de mise à jour dans la vue liste377
8. Suppression d'une entité380
9. Traitement de la jointure OneToOne380
10. Traitement de la jointure ManyToMany383
11. Type EntityType394
12. Création de types de champs personnalisés397
13. Validation des formulaires401
13.1 Règles de validation401
13.2 Service Validator404
13.3 Asserts sur un accesseur406
13.4 Contraintes de validation sur un Callback408
13.5 Contraintes de validation sur la classe410
13.6 Registration group412
13.7 Création de ses propres contraintes414
13.8 Personnalisation des messages d'erreurs : les fragments417
Chapitre 17
La sécurité
1. Introduction421
2. L'authentification422
3. L'autorisation433
3.1 access_control434
3.2 Accès contrôleur439
3.3 Accès action440
3.4 Accès vue440
4. La sécurité d'une API441
4.1 Préparer la classe User446
4.2 Créer la classe Authenticator447
4.3 Configurer le fichier security.yaml448
4.4 Ajouter des utilisateurs pour l'accès à l'API449
4.5 Tester l'accès à l'API451
Chapitre 18
Personnalisation des pages d'erreurs
Chapitre 19
L'internationalisation
1. Introduction457
2. Le principe de la traduction457
3. La variable locale458
4. Les catalogues de traduction460
5. Les éléments à traduire461
6. Les variables dans les traductions463
7. L'aide à la mise à jour des catalogues464
8. L'organisation des catalogues464
9. La gestion du pluriel467
10. La traduction des messages des contraintes de validation470
11. L'utilisation du nom de domaine472
Chapitre 20
Les services
1. Rappel sur les espaces de noms475
2. Notion de service477
3. Utilisation des services478
4. Création de son propre service480
5. Injection d'un service dans un service483
Chapitre 21
La classe Mailer
1. Installation et configuration487
2. Envoi d'e-mails488
3. Utilisation d'un template494
Chapitre 22
Déployer son site en production
1. Introduction499
2. Gestion des performances500
2.1 Le cache HTTP500
2.2 Mise en place des caches sur les contrôleurs501
3. Utiliser un environnement de production505
4. Vérifier la sécurité des dépendances505
5. Préparer le serveur de production506
6. Déployer votre application506
6.1 Déploiement via FTP507
6.2 Déploiement via des outils open source511
6.3 Déploiement via le Cloud511
Conclusion
513
Index
515