Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos...

25

Transcript of Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos...

Page 1: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .
Page 2: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

1Table des matières

Avant-propos

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. À qui s’adresse ce livre ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3. Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4. Pourquoi choisir Laravel ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Chapitre 1Installation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2. macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.1 À propos de Valet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2 Installation de Valet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.2.1 Installer Homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.2.2 Installer PHP7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.3 Installer Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.4 Installer Valet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.2.5 Créer un dossier de travail . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.3 Créer une application Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.3.1 Télécharger Laravel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.3.2 Créer un premier site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.4 Accéder au site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4.1 Tester en local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.4.2 Partager un site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.4.3 HTTPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.1 Choisir une méthode d'installation . . . . . . . . . . . . . . . . . . . . . . . 29

3.1.1 Difficultés d'installation avec Windows . . . . . . . . . . . . . . 293.1.2 Homestead : une VM Ubuntu sous Windows . . . . . . . . . 29

3.2 Installation d'Homestead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.2.1 À propos de la virtualisation . . . . . . . . . . . . . . . . . . . . . . . 303.2.2 VirtualBox et Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

lcroise
Tampon
Page 3: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

2Un framework efficace pour développer vos applications PHP

Laravel

3.2.3 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.2.4 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.2.5 Installer et initialiser Homestead . . . . . . . . . . . . . . . . . . . 323.2.6 Créer une clé SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.7 Créer un dossier de travail . . . . . . . . . . . . . . . . . . . . . . . . . 333.2.8 Modifier le fichier Homestead.yaml . . . . . . . . . . . . . . . . . 34

3.3 Créer une application Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3.1 Installer Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3.2 Télécharger Laravel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.3.3 Créer un site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.3.4 Configurer le site pour Homestead . . . . . . . . . . . . . . . . . . 36

3.4 Accéder au site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.5 Utiliser Homestead. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4. Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.1 Installation rapide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

5. Autres méthodes d’installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.1 Artisan Serve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.2 WampServer, XAMPP, MAMP et EasyPHP . . . . . . . . . . . . . . . . 415.3 Laragon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.4 Valet pour Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.5 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.6 Homestead pour macOS et Linux . . . . . . . . . . . . . . . . . . . . . . . . 425.7 Installation manuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Chapitre 2Premiers pas

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2. Structure de l’application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.1 Environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2 Quelques éléments à configurer . . . . . . . . . . . . . . . . . . . . . . . . . 46

Page 4: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

3Table des matières

4. Choisir une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.1 Quelle base de données ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.2.1 Installer PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.2.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.3.1 Installer MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.3.2 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

5. Utiliser Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

6. Commandes utiles pour déboguer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506.1 dd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506.2 dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516.3 Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Chapitre 3Créer des routes

1. Prise en main. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.1 Définir une route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.2 Les méthodes HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541.3 Choisir les adresses des routes . . . . . . . . . . . . . . . . . . . . . . . . . . . 551.4 La fonction de rappel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2. Paramètres des routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.1 Déclarer des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.2 Utiliser les paramètres capturés. . . . . . . . . . . . . . . . . . . . . . . . . . 582.3 Utiliser plusieurs paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.4 Paramètres optionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

3. Réponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.1 Les types de réponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.2 Les réponses textuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.3 Les réponses JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.4 Les réponses HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Page 5: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

4Un framework efficace pour développer vos applications PHP

Laravel

3.5 Les redirections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4. Groupes de routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.1 Préfixes de routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.2 Sous-domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.3 Autres usages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5. Routes et vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Chapitre 4Utiliser des vues

1. Créer des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.1 Afficher du HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.2 Organisation en sous-dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 721.3 Insérer du code PHP dans les vues . . . . . . . . . . . . . . . . . . . . . . . . 73

2. Premiers pas avec le moteur de gabarit Blade . . . . . . . . . . . . . . . . . . . 742.1 Pourquoi un système de gabarit ? . . . . . . . . . . . . . . . . . . . . . . . . 742.2 Syntaxe de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

3. Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.1 Afficher des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.2 Passer des variables aux vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.3 Afficher des données non protégées . . . . . . . . . . . . . . . . . . . . . . 80

4. Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.2 Boucles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

4.2.1 Afficher une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.2.2 Autres types de boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.2.3 La variable $loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

4.3 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

5. Organiser les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.1 Héritage de gabarit et mise en page. . . . . . . . . . . . . . . . . . . . . . . 85

5.1.1 Créer une base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.1.2 Hériter de la base et créer des sections . . . . . . . . . . . . . . . 88

Page 6: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

5Table des matières

5.1.3 En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2 Les fichiers statiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

5.2.1 Le dossier public . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2.2 Introduction à Laravel Mix . . . . . . . . . . . . . . . . . . . . . . . . 91

5.3 Inclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 935.4 Piles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955.5 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965.6 À propos du cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6. Internationalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.1 Fichiers de traductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.2 Définition de la langue courante . . . . . . . . . . . . . . . . . . . . . . . . . 996.3 Utilisation dans les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

6.3.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006.3.2 Pluriel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

6.4 Groupes de routes pour l’internationalisation . . . . . . . . . . . . . 101

7. En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Chapitre 5Eloquent ORM

1. Object Relational Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051.1 À propos des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051.2 Manipuler des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061.3 Active Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

2. Construire des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072.1 Utiliser Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

2.1.1 Initialisation d’un modèle . . . . . . . . . . . . . . . . . . . . . . . . 1072.1.2 Modèles et migrations . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

2.2 Créer une migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.2.1 Initialisation d’une table . . . . . . . . . . . . . . . . . . . . . . . . . 1092.2.2 Créer des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.2.3 Exemples et conseils de création de tables . . . . . . . . . . . 112

Page 7: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

6Un framework efficace pour développer vos applications PHP

Laravel

2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . . . . . . . . . . . . . 1152.2.5 Lancer les migrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.2.6 Rollback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2.3 Lier les propriétés aux colonnes . . . . . . . . . . . . . . . . . . . . . . . . . 1172.3.1 Champs dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.3.2 Autres propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

3. Utiliser les modèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203.1 Créer et enregistrer une instance de modèle . . . . . . . . . . . . . . . 120

3.1.1 Instancier un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203.1.2 Enregistrement d’un modèle . . . . . . . . . . . . . . . . . . . . . . 1213.1.3 Créer et enregistrer un modèle en une ligne . . . . . . . . . . 121

3.2 Récupérer un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1233.2.1 Récupérer par l’identifiant . . . . . . . . . . . . . . . . . . . . . . . . 1233.2.2 Récupérer par une requête . . . . . . . . . . . . . . . . . . . . . . . . 1243.2.3 Récupérer ou créer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

3.3 Modifier un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253.3.1 Mise à jour d’un modèle. . . . . . . . . . . . . . . . . . . . . . . . . . 1253.3.2 Mettre à jour plusieurs modèles . . . . . . . . . . . . . . . . . . . 126

3.4 Supprimer un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263.4.1 Supprimer un modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1263.4.2 Supprimer plusieurs modèles . . . . . . . . . . . . . . . . . . . . . . 1273.4.3 Soft delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

3.5 Utiliser une collection de modèles. . . . . . . . . . . . . . . . . . . . . . . 1293.5.1 Récupérer une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293.5.2 Requêtes complexes (Query Builder) . . . . . . . . . . . . . . . 130

3.6 Utilisation d’un modèle : mise en pratique. . . . . . . . . . . . . . . . 1313.6.1 Création du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323.6.2 Création des routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343.6.3 Création de la vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353.6.4 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

4. Organiser les modèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374.1 Espace de noms par défaut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374.2 Choisir un autre espace de noms. . . . . . . . . . . . . . . . . . . . . . . . 138

Page 8: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

7Table des matières

5. Les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395.1 Relations 1..1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

5.1.1 Création des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.1.2 Structure des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.1.3 Déclarer les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.1.4 Accéder aux relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

5.2 Relations 1..n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.2.1 Création des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.2.2 Structure des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.2.3 Déclarer les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475.2.4 Accéder aux relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

5.3 Relations n..n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505.3.1 Création des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.3.2 Structure des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515.3.3 Déclarer les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555.3.4 Accéder aux relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

6. Mutation, accesseurs et transformation . . . . . . . . . . . . . . . . . . . . . . 1586.1 Accesseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1586.2 Mutateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606.3 Transformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

7. Requêtes manuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Chapitre 6Organiser grâce aux contrôleurs

1. Définition et usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.1 Qu'est-ce qu’un contrôleur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.2 Déplacer le code des fonctions de rappel des routes. . . . . . . . . 163

2. Créer et utiliser un contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642.1 Créer un contrôleur avec Artisan. . . . . . . . . . . . . . . . . . . . . . . . 1642.2 Structure d’un contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.3 Lier une route à un contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Page 9: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

8Un framework efficace pour développer vos applications PHP

Laravel

2.4 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.4.1 Passer un paramètre à un contrôleur. . . . . . . . . . . . . . . . 1662.4.2 Valeurs optionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

3. Dépendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1683.1 Injection de dépendance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

3.1.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1683.1.2 Ordre des arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

3.2 La classe Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703.2.1 Obtenir les informations de la requête . . . . . . . . . . . . . . 1703.2.2 Données des formulaires . . . . . . . . . . . . . . . . . . . . . . . . . 1713.2.3 URI et méthodes HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . 172

3.3 Autres instances injectables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

4. Organiser une application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754.1 Lister des routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754.2 Espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764.3 Des contrôleurs CRUD de ressources . . . . . . . . . . . . . . . . . . . . 177

4.3.1 Rappels sur le CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774.3.2 Séparer les contrôleurs par ressource. . . . . . . . . . . . . . . . 1774.3.3 Contrôleur de ressources . . . . . . . . . . . . . . . . . . . . . . . . . 178

5. Bilan des premiers chapitres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Chapitre 7Filtrer et décorer avec les middlewares

1. À propos des middlewares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.1 Cycle de vie de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.2 Exemple du middleware d’authentification . . . . . . . . . . . . . . . 1831.3 Autres exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

2. Créer un middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1842.1 Utiliser Artisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1842.2 Structure d’un middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Page 10: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

9Table des matières

3. Utiliser un middleware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.1 Middleware global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1863.2 Middleware pour une route . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

3.2.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1883.2.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

3.3 Middleware pour un groupe de routes . . . . . . . . . . . . . . . . . . . 1893.3.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1893.3.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

3.4 Middleware pour un contrôleur . . . . . . . . . . . . . . . . . . . . . . . . 190

Chapitre 8Traiter des formulaires

1. Sécuriser les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1931.1 Attaques CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1931.2 Fonctionnement du CSRF Token . . . . . . . . . . . . . . . . . . . . . . . 1941.3 Utilisation du csrf_field dans les formulaires . . . . . . . . . . . . . . 1941.4 Requêtes Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1951.5 Désactiver la protection pour certaines routes . . . . . . . . . . . . . 196

2. Valider les données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1972.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1972.2 Écrire les règles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

2.2.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1972.2.2 Logique de validation dans les contrôleurs . . . . . . . . . . . 1992.2.3 Règles disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.2.4 Enregistrement en base de données. . . . . . . . . . . . . . . . . 202

2.3 Afficher les messages d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . 2032.3.1 La variable $errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2032.3.2 Affichage dans la vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2042.3.3 Traduction des messages d’erreur . . . . . . . . . . . . . . . . . . 2042.3.4 Récupérer les anciennes valeurs du formulaire . . . . . . . . 205

Page 11: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

10Un framework efficace pour développer vos applications PHP

Laravel

2.4 Afficher un message de succès . . . . . . . . . . . . . . . . . . . . . . . . . . 2062.4.1 Contrôleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2062.4.2 Vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

2.5 Méthode de validation alternative . . . . . . . . . . . . . . . . . . . . . . 207

3. Formulaires PATCH, PUT et DELETE . . . . . . . . . . . . . . . . . . . . . . . 208

4. Upload de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2094.1 Création du formulaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2094.2 Validation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2104.3 Récupérer les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2114.4 Stocker les fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

4.4.1 Stocker sur le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2114.4.2 Paramétrer un autre espace de stockage . . . . . . . . . . . . . 2124.4.3 Dossier public . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

Chapitre 9Authentification et autorisations

1. Démarrer rapidement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2151.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2161.2 Le modèle User et les migrations . . . . . . . . . . . . . . . . . . . . . . . . 2161.3 Les vues, les routes et les contrôleurs . . . . . . . . . . . . . . . . . . . . 218

1.3.1 Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2181.3.2 Les routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2181.3.3 Les contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

1.4 Utiliser le système d’authentification . . . . . . . . . . . . . . . . . . . . 2211.5 Espaces privés : protéger les routes . . . . . . . . . . . . . . . . . . . . . . 221

2. Paramétrage avancé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2222.1 Personnaliser le mail de réinitialisation de mot de passe . . . . . 2222.2 Événements et écouteurs : envoyer un mail de bienvenue . . . 2232.3 Ajouter un champ téléphone lors de l’inscription . . . . . . . . . . 226

2.3.1 Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2262.3.2 Modification du modèle. . . . . . . . . . . . . . . . . . . . . . . . . . 228

Page 12: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

11Table des matières

2.3.3 Modification de la vue . . . . . . . . . . . . . . . . . . . . . . . . . . . 2282.3.4 Modification du contrôleur . . . . . . . . . . . . . . . . . . . . . . . 229

3. Autres méthodes d’authentification . . . . . . . . . . . . . . . . . . . . . . . . . 2303.1 Laravel Socialite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2303.2 Authentification manuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2323.3 Prise de contrôle (impersonation) . . . . . . . . . . . . . . . . . . . . . . . 2323.4 Authentification HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2333.5 Laravel Passport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

4. Déconnexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

5. Rappels sur la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2355.1 Mots de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2355.2 Cryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

6. Autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2386.1 Portes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

6.1.1 Déclarer une porte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2396.1.2 Protéger à l’aide d’une porte. . . . . . . . . . . . . . . . . . . . . . . 240

6.2 Politiques d’autorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2426.2.1 Création d’une politique d’autorisation . . . . . . . . . . . . . 2426.2.2 Protéger avec une politique d’autorisation . . . . . . . . . . . 244

6.3 Rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2466.3.1 Ajout d’une colonne « role » . . . . . . . . . . . . . . . . . . . . . . . 2476.3.2 Politique d’autorisation . . . . . . . . . . . . . . . . . . . . . . . . . . 2486.3.3 Protéger les routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Chapitre 10Les sessions et le cache

1. Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2511.1 Choisir un pilote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

1.1.1 Stocker dans des fichiers pour le développement . . . . . . 2521.1.2 Utiliser Redis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2521.1.3 Utiliser une base de données . . . . . . . . . . . . . . . . . . . . . . 253

Page 13: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

12Un framework efficace pour développer vos applications PHP

Laravel

1.2 Stocker des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.3 Retrouver des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2541.4 Supprimer des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2541.5 Messages flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

2. Le cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2562.1 Choisir un pilote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

2.1.1 Stockage dans des fichiers . . . . . . . . . . . . . . . . . . . . . . . . 2572.1.2 Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2572.1.3 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

2.2 Stocker, retrouver et supprimer des données . . . . . . . . . . . . . . 257

Chapitre 11Les files d’attente

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2611.1 Pourquoi utiliser des files d’attente ? . . . . . . . . . . . . . . . . . . . . 261

2. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2622.1 Pilote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2622.2 Queue Worker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

3. Créer et expédier des tâches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2633.1 Créer une tâche. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2633.2 Expédier une tâche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

4. Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2674.1 Traitement des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2674.2 Horizon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Page 14: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

13Table des matières

Chapitre 12Envoyer des e-mails

1. Développement local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2691.1 Mailtrap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

1.1.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2701.1.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

1.2 Autres méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2711.2.1 E-mails dans les logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2711.2.2 Destinataire global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

2. Préparer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2722.1 Création de la classe Mailable . . . . . . . . . . . . . . . . . . . . . . . . . . 2722.2 Création des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

2.2.1 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2742.2.2 Markdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

2.3 Configuration de l’e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.3.1 Passer des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.3.2 Expéditeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2782.3.3 Sujet des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

2.4 Pièces jointes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

3. Envoyer des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2803.1 Envoyer un e-mail immédiatement . . . . . . . . . . . . . . . . . . . . . . 2803.2 Mise en file d’attente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2813.3 Envoyer un e-mail plus tard. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2823.4 Afficher un e-mail sans l’envoyer . . . . . . . . . . . . . . . . . . . . . . . 283

4. Utiliser des notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2844.1 Créer une notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

4.1.1 Commande de création . . . . . . . . . . . . . . . . . . . . . . . . . . 2844.1.2 Définir la liste des canaux . . . . . . . . . . . . . . . . . . . . . . . . 285

4.2 Paramétrage des différents canaux . . . . . . . . . . . . . . . . . . . . . . 2864.2.1 E-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2864.2.2 Slack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2884.2.3 Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Page 15: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

14Un framework efficace pour développer vos applications PHP

Laravel

4.2.4 SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2914.3 Envoyer une notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

4.3.1 Envoyer à un utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . 2924.3.2 Envoyer à plusieurs utilisateurs. . . . . . . . . . . . . . . . . . . . 2934.3.3 Mettre en file d’attente . . . . . . . . . . . . . . . . . . . . . . . . . . 293

5. Choisir un pilote en environnement de production. . . . . . . . . . . . . 2945.1 Amazon SES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2955.2 Mailgun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2965.3 SMTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

Chapitre 13Tests automatisés

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

2. Tests unitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3012.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3012.2 Créer un test unitaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3012.3 Lancer les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

3. Base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

3.1.1 Modifier le fichier de configuration. . . . . . . . . . . . . . . . . 3053.1.2 Mettre à jour le fichier phpunit.xml . . . . . . . . . . . . . . . . 307

3.2 Migrations et transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3073.3 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3093.4 Fabriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

3.4.1 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.4.2 Utiliser les fabriques dans les tests . . . . . . . . . . . . . . . . . 313

4. Tester des fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3144.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3144.2 Créer un test de fonctionnalité . . . . . . . . . . . . . . . . . . . . . . . . . 3154.3 Lancer les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Page 16: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

15Table des matières

5. Laravel Dusk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3165.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3165.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3175.3 Créer un test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

5.3.1 Créer la classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3185.3.2 Interagir avec le navigateur . . . . . . . . . . . . . . . . . . . . . . . 319

5.4 Lancer les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3225.5 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

5.5.1 Utiliser un autre navigateur. . . . . . . . . . . . . . . . . . . . . . . 3235.5.2 Utilisation des pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

6. Simulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

7. Automatiser le lancement des tests. . . . . . . . . . . . . . . . . . . . . . . . . . 327

Chapitre 14Créer et utiliser des composants

1. Intégrer un composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3291.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3291.2 Choisir un composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3301.3 Ajouter un composant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3321.4 Mettre à jour les composants . . . . . . . . . . . . . . . . . . . . . . . . . . 3331.5 Version partagée des composants . . . . . . . . . . . . . . . . . . . . . . . 333

1.5.1 Partager le fichier composer.lock . . . . . . . . . . . . . . . . . . . 3331.5.2 Installer les dépendances . . . . . . . . . . . . . . . . . . . . . . . . . 3341.5.3 Mettre à jour les dépendances . . . . . . . . . . . . . . . . . . . . . 3341.5.4 En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

2. Composants utiles et de qualité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

3. Créer ses propres composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.2 Composant Laravel ou PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Page 17: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

16Un framework efficace pour développer vos applications PHP

Laravel

3.3 Réaliser un composant pour Laravel . . . . . . . . . . . . . . . . . . . . . 3383.3.1 ServiceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3393.3.2 Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3403.3.3 Contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3413.3.4 Vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3413.3.5 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3423.3.6 Migrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

3.4 Mettre à disposition un composant (Packagist) . . . . . . . . . . . . 3443.4.1 Packagist et Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.4.2 Fichier composer.json. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.4.3 Package Discovery pour les composants Laravel . . . . . . 3463.4.4 Publier un composant . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

Chapitre 15Assistants

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

2. Manipuler des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . 3502.1 Transformer des chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

2.1.1 Casse : Serpents, Kebabs et Chameaux. . . . . . . . . . . . . . 3502.1.2 Slug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3512.1.3 Limiter une chaîne à un certain nombre de caractères. . 351

2.2 Manipuler des portions de chaînes . . . . . . . . . . . . . . . . . . . . . . 3522.2.1 Extraire une partie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3522.2.2 Remplacer une partie d’une chaîne . . . . . . . . . . . . . . . . . 352

2.3 Singulier et pluriel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3532.4 Vérifier des chaînes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

2.4.1 Commence ou finit par… . . . . . . . . . . . . . . . . . . . . . . . . 3532.4.2 Vérifier si une chaîne en contient une autre. . . . . . . . . . 3542.4.3 Vérifier si une chaîne est similaire. . . . . . . . . . . . . . . . . . 354

2.5 Fonctions diverses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

Page 18: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

17Table des matières

3. Fonctions sur les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3553.1 Récupérer des éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3553.2 Transformer un tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3573.3 Vérifier la présence d’éléments . . . . . . . . . . . . . . . . . . . . . . . . . 358

4. Autres fonctions assistantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3584.1 Chemins et dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3584.2 URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3594.3 Arrêter le programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3594.4 Requêtes et réponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3604.5 Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

5. Les collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3615.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3615.2 Transformer un tableau en collection . . . . . . . . . . . . . . . . . . . . 3625.3 Manipuler des collections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

6. Tinker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

Chapitre 16Déployer un site en production

1. Considérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3671.1 Choisir son environnement de production . . . . . . . . . . . . . . . . 3681.2 Les solutions à disposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

2. Laravel Forge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

3. Préparer un serveur manuellement . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

3.1.1 Ce qu’il faut avoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.1.2 Ce qui sera installé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

3.2 Préparer le serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.2.1 Initialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.2.2 Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.2.3 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.2.4 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Page 19: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

18Un framework efficace pour développer vos applications PHP

Laravel

3.2.5 Utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3753.3 Installer l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3763.4 Configurer Nginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3773.5 Désactiver l’authentification par mot de passe . . . . . . . . . . . . 379

3.5.1 Créer un utilisateur pour se connecter . . . . . . . . . . . . . . 3793.5.2 Protéger l’authentification par clé SSH uniquement . . . 380

3.6 HTTPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3803.7 Mise à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

4. Intégration continue et déploiement . . . . . . . . . . . . . . . . . . . . . . . . 383

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Page 20: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

163

Chapitre 6

Organiser grâce aux contrôleurs

Organiser grâce aux contrôleurs1. Définition et usage

1.1 Qu'est-ce qu’un contrôleur ?

Dans le modèle MVC (modèle-vue-contrôleur), le contrôleur contient lalogique concernant les actions effectuées par l’utilisateur. En pratique, dansune application Laravel, l’utilisation de contrôleurs permet de libérer lesroutes du code qu’elles contiennent dans leurs fonctions de rappel.

Un contrôleur est matérialisé par une classe et chacune de ses méthodes repré-sente une action. Une action correspond généralement à une route.

1.2 Déplacer le code des fonctions de rappel des routes

Les routes créées dans les chapitres précédents sont surchargées de code pourtraiter les actions dans leurs fonctions de rappel. L’objectif est de les libérer dece code pour obtenir un fichier de routes propre qui fait simplement le lienentre les URI de l’application et les actions à effectuer pour chacune de cesURI.

Le fichier des routes routes/web.php est ainsi allégé, et devient un indexdes différentes URI avec leurs actions associées.

lcroise
Tampon
Page 21: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

© E

dit

ions

EN

I -

All r

ights

rese

rved

164Un framework efficace pour développer vos applications PHP

Laravel

Exemple de fichier de routes sans fonction de rappel

Route::get('videos', 'VideoController@index'); Route::get('videos/creer', 'VideoController@create'); Route::post('videos/creer', 'VideoController@store'); Route::get('videos/{id}', 'VideoController@show');

Le fonctionnement des routes avec les contrôleurs est détaillé dans la suite dece chapitre.

2. Créer et utiliser un contrôleur

2.1 Créer un contrôleur avec Artisan

Comme pour de nombreux autres éléments, Artisan, l’outil en ligne de com-mande fourni avec Laravel, permet de créer rapidement un fichier contenantla structure de base d’un contrôleur :

Créer un contrôleur

php artisan make:controller ProductController

Les contrôleurs sont créés dans le dossier app/Http/Controllers.

Remarque

Par convention, les contrôleurs sont en notation Camel Case et terminent tousavec le mot Controller. Cela permet de les différencier des services et desmodèles auxquels ils font référence.

Page 22: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

165Organiser grâce aux contrôleursChapitre 6

2.2 Structure d’un contrôleur

Un contrôleur est une classe qui étend la classe de base Controller et dontchaque méthode publique représente généralement une action qui correspondà une route.

Fichier app/Http/Controllers/ProductController.php

<?php namespace App\Http\Controllers; class ProductController extends Controller { public function home() { return 'Bienvenue sur la page des produits'; } public function show($id) { return 'Page du produit : ' . $id; } }

Une méthode d’un contrôleur retourne une réponse, exactement comme dansles fonctions de rappels du chapitre « Créer des routes » à propos des routes.Dans l’exemple précédent, les méthodes home et show retournent uneréponse sous la forme d’une chaîne de caractères, mais il aurait aussi bien pus’agir d’une vue ou d’un objet JSON. Le code ci-dessous présente le mêmecontrôleur, dont les méthodes retournent cette fois des vues.

Fichier app/Http/Controllers/ProductController.php

<?php namespace App\Http\Controllers; use App\Product; class ProductController extends Controller {

Page 23: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

© E

dit

ions

EN

I -

All r

ights

rese

rved

166Un framework efficace pour développer vos applications PHP

Laravel

public function home() { return view('products.home'); } public function show($id) { return view('products.show', [ 'product' => Product::find($id) ]); } }

2.3 Lier une route à un contrôleur

Dans le fichier routes/web.php, à la place d’utiliser des fonctions de rappelcomme cela a été le cas dans les précédents chapitres, l’organisation avec descontrôleurs permet de simplement signaler au routeur quel contrôleur allerchercher et quelle action effectuer. La syntaxe à utiliser est NomDuControl-ler@action sous forme d'une chaîne de caractères.

Lier une route à un contrôleur

Route::get('products', 'ProductController@home'); Route::get('products/{id}', 'ProductController@show');

L’action correspond au nom de la méthode du contrôleur à exécuter.

2.4 Variables

2.4.1 Passer un paramètre à un contrôleur

Pour passer une variable à un contrôleur, il faut la déclarer dans le chemin dela route entre accolades et mettre la variable en paramètre de la méthode quireprésente l’action à effectuer, comme dans l’exemple ci-dessous.

Fichier routes/web.php

Route::get('products/{id}', 'ProductController@show');

Page 24: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

167Organiser grâce aux contrôleursChapitre 6

Fichier app/Http/Controllers/ProductController.php

class ProductController extends Controller { public function show($id) { return 'Page du produit : ' . $id; } }

2.4.2 Valeurs optionnelles

Les paramètres optionnels (qui permettent par exemple d’associer une mêmeaction aux URI products et products/17) doivent être déclarés avec unpoint d’interrogation dans le chemin de la route et avec une valeur par défautà null dans l’action du contrôleur.

Fichier routes/web.php

Route::get('products/{id?}', 'ProductController@show');

Fichier app/Http/Controllers/ProductController.php

class ProductController extends Controller { public function show($id = null) { if ($id === null) { return Product::all(); } else { return Product::findOrFail($id); } } }

Page 25: Table des matières - fnac-static.com€¦ · 6 Un framework efficace pour développer vos applications PHP Laravel 2.2.4 Mise à jour d’une table. . . . . . . . . . . . . . . .

© E

dit

ions

EN

I -

All r

ights

rese

rved

168Un framework efficace pour développer vos applications PHP

Laravel

3. Dépendances

3.1 Injection de dépendance

3.1.1 Fonctionnement

Il est possible grâce aux fonctions assistantes et au système de façades fournipar Laravel d’accéder à de nombreux éléments dans les contrôleurs comme larequête de l’utilisateur, le cache, les sessions, etc.

Il est également possible d’injecter les dépendances directement dans les mé-thodes des contrôleurs, simplement en donnant l'indication d'un type connupar Laravel à un paramètre de la méthode représentant l’action.

Par exemple, pour récupérer une instance de la classe Illumi-nate\Http\Request, on peut passer à une méthode un premier paramètre$request préfixé par son type.

Affichage de l’URL dans une méthode de contrôleur

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller

{

public function home(Request $request)

{

return 'L’URL de la page est :' . $request->url();

}

}

Remarque

La classe Request et la fonction assistante pour y accéder seront étudiéesdans la suite de ce chapitre et au chapitre « Traiter des formulaires », lessessions et le cache au chapitre « Les sessions et le cache ». En attendant, onretiendra simplement qu’on peut transmettre d’autres éléments du frameworkà une méthode du contrôleur.