9782212143980
9782212143980
9782212143980
LARAVEL
vous pratiquez PHP et vous savez créer des sites ? vous avez l’impression de réécrire souvent
les mêmes choses ? vous vous posez des questions sur la meilleure façon de traiter une tâche
particulière, comme créer des formulaires ou envoyer des e-mails ? vous aimeriez disposer d’une
boîte à outils toute prête pour tout le code laborieux ? alors vous avez besoin d’un framework
PHP et laravel constitue actuellement ce qui se fait de mieux en la matière !
maurice chavelli
LARAVEL
Les bases de Laravel Maurice Chavelli a commencé l’informatique
• Présentation générale sur un Sinclair ZX en 1981. Développeur .NET et
• Installation et organisation
administrateur réseau, il devient rapidement un
acteur très présent sur le Web. Il ouvre en 2013
• Routage et façades
LARAVEL
un blog sur le framework PHP Laravel. Créateur
• Les réponses de plusieurs sites web, il découvre Bootstrap
• Les contrôleurs lors de sa sortie en 2011 et l’adopte rapidement
• Les entrées en pressentant tout son potentiel !
• La validation
• Configuration et session
29,90 E
LARAVEL
vous pratiquez PHP et vous savez créer des sites ? vous avez l’impression de réécrire souvent
les mêmes choses ? vous vous posez des questions sur la meilleure façon de traiter une tâche
particulière, comme créer des formulaires ou envoyer des e-mails ? vous aimeriez disposer d’une
boîte à outils toute prête pour tout le code laborieux ? alors vous avez besoin d’un framework
PHP et laravel constitue actuellement ce qui se fait de mieux en la matière !
maurice chavelli
LARAVEL
Les bases de Laravel Maurice Chavelli a commencé l’informatique
• Présentation générale sur un Sinclair ZX en 1981. Développeur .NET et
• Installation et organisation
administrateur réseau, il devient rapidement un
acteur très présent sur le Web. Il ouvre en 2013
• Routage et façades
LARAVEL
un blog sur le framework PHP Laravel. Créateur
• Les réponses de plusieurs sites web, il découvre Bootstrap
• Les contrôleurs lors de sa sortie en 2011 et l’adopte rapidement
• Les entrées en pressentant tout son potentiel !
• La validation
• Configuration et session
laravel
laravel
Le code est plus fourni et moins détaillé ; il vous faudra l’analyser et le mettre en
pratique pour mettre à profit cet apprentissage.
Cet ouvrage nécessite d’avoir des connaissances correctes en PHP, HTML, CSS et
JavaScript. Si vous avez des lacunes dans un de ces domaines, vous pouvez facilement
! les combler avec les nombreux cours à disposition sur le site OpenClassrooms (www.
openclassrooms.com) et avec les nombreux ouvrages sur le sujet des éditions Eyrolles
(www.editions-eyrolles.com) !
VI
Table des matières
Première partie – Les bases de Laravel 1
1 Présentation générale 3
Un framework ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Approche personnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
(Re)découvrir PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Définition et intérêt du framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Pourquoi Laravel ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Constitution de Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Le meilleur de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Documentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Définitions de MVC et POO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
POO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 Installation et organisation 9
Composer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Présentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Créer une application Laravel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Installation avec Composer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Installation avec Laravel Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Autorisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
URL propres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Découvrez le langage PHP Laravel
L’organisation de Laravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Dossier app . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Autres dossiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Fichiers à la racine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Accessibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Environnement et messages d’erreur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Le composant Html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Routage et façades 21
Les requêtes HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Petit rappel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
.htaccess et index.php. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Le cycle de la requête. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Plusieurs routes et paramètres de route. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Erreur d’exécution et contrainte de route. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Une route nommée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Les façades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Les réponses 31
Construire une réponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Codes des réponses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
La vue paramétrée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Simplifier la syntaxe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Les redirections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Les contrôleurs 39
L’utilité des contrôleurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Constitution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Liaison avec les routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Route nommée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
L’utilisation d’un contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6 Les entrées 45
Scénario et routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
VIII
Table des matières
Le middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Le formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Le contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
La protection CSRF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7 La validation 53
Scénario et routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Vue de contact. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Vue de confirmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Vue du courriel pour l’administrateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
La requête de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Le contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Envoyer un courriel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8 Configuration et session 65
La configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Les sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
La requête de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Les routes et le contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9 L’injection de dépendances 75
Le problème et sa solution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Problème. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Solution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
La gestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
IX
Découvrez le langage PHP Laravel
13 L’authentification 133
La commande Artisan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
X
Table des matières
14 La relation 1:n 161
Les données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Migrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Population. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
La relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Les modèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Contrôleur et routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Contrôleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Le gestionnaire des articles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Les middlewares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
La validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Le fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Liste des articles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Ajout d’un article . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Suppression d’un article. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Vue pour afficher les articles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Vue pour créer un article. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
XI
Découvrez le langage PHP Laravel
15 La relation n:n 183
Les données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Migrations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Population. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Les modèles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
La validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
La gestion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Contrôleur et routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Le fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Liste des articles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Nouvel article. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Suppression d’un article. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Recherche par mot-clé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Vue de création d’un article. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
XII
Table des matières
21 La localisation 269
Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Façade Lang et classe Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Fichiers de langue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Le middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Les dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Route et contrôleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
La réalisation de la localisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
XIII
Découvrez le langage PHP Laravel
22 Ajax 285
Les vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Vue login. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Le traitement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Contrôleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Index 325
XIV
Première partie
Dans cette première partie, je vous propose de découvrir les bases de Laravel : où le
trouver, comment l’installer, quelle configuration est nécessaire pour le faire fonction-
ner… Je vous présente aussi son organisation et sa philosophie : comment les requêtes
sont aiguillées par des routes et dirigées vers des contrôleurs pour être traitées, et
comment retourner ensuite une réponse appropriée.
Par ailleurs, vu qu’il est rare qu’une application web n’utilise pas de formulaire, je vous
montre la manière d’en créer un, de valider les entrées saisies et de traiter les informa-
tions envoyées. La configuration de Laravel étant aussi une application avec ses propres
nécessités et contraintes, nous verrons comment elle fonctionne.
Le protocole HTTP est performant mais il permet seulement des requêtes ponctuelles
sans persistance. Or, lorsqu’on crée un site, on souhaite permettre aux utilisateurs de
se connecter et d’avoir un environnement et des informations personnalisés. Il est donc
nécessaire de gérer des sessions, et Laravel est bien équipé pour le faire.
Pour terminer cette partie, la notion d’injection de dépendance, qui est intensivement
utilisée dans Laravel, sera présentée avec un exemple pratique d’application.
1 Présentation
générale
Dans ce premier chapitre, je vais évoquer PHP, son historique et sa situation actuelle.
J’expliquerai aussi l’intérêt d’utiliser un framework pour ce langage et surtout pourquoi
j’ai choisi Laravel. J’évoquerai enfin le patron MVC et la programmation orientée objet
(POO).
Un framework ?
Approche personnelle
PHP est un langage populaire et accessible. Il est facile à installer et présent chez tous
les hébergeurs. C’est un langage riche et plutôt facile à aborder, surtout pour quelqu’un
qui a déjà des bases en programmation. On peut réaliser rapidement une application
web fonctionnelle grâce à lui. Toutefois, le revers de cette simplicité est que, bien sou-
vent, le code créé est confus, complexe et sans aucune cohérence. Il faut reconnaître
que PHP n’encourage pas à organiser son code et rien n’oblige à le faire.
Lorsqu’on crée des applications PHP, on finit par avoir des codes personnels réutili-
sables pour les fonctionnalités récurrentes, par exemple pour gérer des pages de façon
dynamique. Une fois qu’on a créé une fonction ou une classe pour réaliser une tâche il
est naturel d’aller la chercher lorsque la même situation se présente. Puisque c’est une
bibliothèque personnelle et qu’on est seul maître à bord, il faut évidemment la mettre
à jour lorsque c’est nécessaire et c’est parfois fastidieux.
En général, on a aussi une hiérarchie de dossiers à laquelle on est habitué et on
la reproduit quand on commence le développement d’une nouvelle application.
On se rend compte parfois que cette habitude a des effets pervers, parce que la
hiérarchie qu’on met ainsi en place de façon systématique n’est pas forcément la
plus adaptée.
Première partie – Les bases de Laravel
(Re)découvrir PHP
Lorsque j’ai découvert PHP à la fin des années 1990, il en était à la version 3. C’était
essentiellement un langage de script, en général mélangé au HTML, qui permettait de
réaliser du templating, des accès aux données et du traitement. La version 4 en 2000
a apporté plus de stabilité et une ébauche de l’approche objet. Cependant, il a fallu
attendre la version 5 en 2004 pour disposer d’un langage de programmation à la hauteur
du standard existant pour les autres langages.
Cette évolution incite à perdre les mauvaises habitudes si on en avait. Un site comme
http://www.phptherightway.com offre de bonnes pistes pour mettre en place de bonnes
pratiques. Donc, si vous êtes un bidouilleur de code PHP, je vous conseille cette saine
lecture qui devrait vous offrir un nouvel éclairage sur ce langage et, surtout, vous auto-
riser à vous lancer de façon correcte dans le code de Laravel.
Pourquoi Laravel ?
Constitution de Laravel
Laravel, créé par Taylor Otwel, initie une nouvelle façon de concevoir un framework en
utilisant ce qui existe de mieux pour chaque fonctionnalité. Par exemple, toute applica-
tion web a besoin d’un système qui gère les requêtes HTTP. Plutôt que de réinventer
quelque chose, le concepteur de Laravel a tout simplement utilisé celui de Symfony
en l’étendant pour créer un système de routage efficace. De la même manière, l’envoi
4
Chapitre 1. Présentation générale
des courriels se fait avec la bibliothèque SwiftMailer. En quelque sorte, Otwel a fait
son marché parmi toutes les bibliothèques disponibles. Nous verrons dans cet ouvrage
comment cela est réalisé. Néanmoins, Laravel n’est pas seulement le regroupement de
bibliothèques existantes ; c’est aussi un ensemble de nombreux composants originaux
et surtout une orchestration de tout cela.
Vous allez trouver dans Laravel :
• un système de routage perfectionné (RESTFul et ressources) ;
• un créateur de requêtes SQL et un ORM performants ;
• un moteur de templates efficace ;
• un système d’authentification pour les connexions ;
• un système de validation ;
• un système de pagination ;
• un système de migration pour les bases de données ;
• un système d’envoi de courriels ;
• un système de cache ;
• un système d’événements ;
• un système d’autorisations ;
• une gestion des sessions…
• et bien d’autres choses encore que nous allons découvrir ensemble.
Il est probable que certains éléments de cette liste ne vous évoquent pas grand-chose,
mais ce n’est pas important pour le moment ; tout cela deviendra plus clair au fil des
chapitres.
Le meilleur de PHP
Plonger dans le code de Laravel, c’est recevoir un cours de programmation tant le style
est clair et élégant et le code merveilleusement organisé. La version actuelle de Laravel
est la 5.2 et nécessite au minimum la version 5.5.9 de PHP. Pour aborder de façon
efficace ce framework, il est souhaitable de se familiariser avec les notions suivantes.
• Les espaces de noms : c’est une façon de bien ranger le code pour éviter des conflits
de nommage. Laravel utilise cette possibilité de façon intensive. Tous les composants
sont rangés dans des espaces de noms distincts, de même que l’application créée.
• Les fonctions anonymes : ce sont des fonctions sans nom (souvent appelées clo-
sures) qui améliorent le code. Les utilisateurs de JavaScript y sont habitués, ceux
de PHP un peu moins parce qu’elles y sont plus récentes. Laravel les utilise aussi de
façon systématique.
• Les méthodes magiques : ce sont des méthodes qui n’ont pas été explicitement
décrites dans une classe, mais qui peuvent être appelées et résolues.
• Les interfaces : une interface est un contrat de constitution des classes. En pro-
grammation objet, c’est le sommet de la hiérarchie. Tous les composants de Laravel
5
Première partie – Les bases de Laravel
sont fondés sur des interfaces. La version 5 a même vu apparaître un lot de contrats
pour étendre de façon sereine le framework.
• Les traits : c’est une façon d’ajouter des propriétés et méthodes à une classe sans
passer par l’héritage, ce qui aide à passer outre certaines limitations de l’héritage
simple proposé par défaut par PHP.
Un framework n’est pas fait pour remplacer la connaissance d’un langage, mais pour
! assister celui (ou celle) qui connaît déjà bien ce langage. Si vous avez des lacunes, il vaut
mieux les combler pour profiter pleinement de Laravel.
Documentation
MVC
6
Chapitre 1. Présentation générale
Le modèle MVC
POO
Laravel est fondamentalement orienté objet. La POO est un design pattern qui s’éloigne
radicalement de la programmation procédurale. Avec la POO, tout le code est placé
dans des classes qui découlent d’interfaces établissant des contrats de fonctionnement.
Avec la POO, on manipule des objets.
Avec la POO, la responsabilité du fonctionnement est répartie dans des classes alors que
dans l’approche procédurale tout est mélangé. Le fait de répartir la responsabilité évite
la duplication du code qui est le lot presque forcé de la programmation procédurale.
Laravel pousse au maximum cette répartition en utilisant l’injection de dépendances.
L’utilisation de classes bien identifiées dont chacune a un rôle précis, le pilotage par
des interfaces claires et l’injection de dépendances, tout cela crée un code élégant,
efficace, lisible, facile à maintenir et à tester. C’est ce que Laravel propose. Alors, vous
7
Première partie – Les bases de Laravel
pouvez évidemment greffer là-dessus votre code approximatif, mais vous pouvez aussi
vous inspirer des sources du framework pour améliorer votre style de programmation.
En résumé
8
2 Installation
et organisation
Dans ce chapitre, nous allons faire connaissance avec le gestionnaire de dépendances
Composer, présenter la création d’une application Laravel et expliquer comment le code
est organisé dans cette application.
Avertissement
Pour utiliser Laravel et suivre ce chapitre et l’ensemble de l’ouvrage, vous aurez besoin d’un serveur
équipé de PHP avec au minimum la version 5.5.9 et aussi de MySQL. Il existe plusieurs applications
« tout-en-un » faciles à installer : wampserver (http://www.wampserver.com/), xampp (https://
www.apachefriends.org/fr/index.html), easyphp (http://www.easyphp.org/)… Personnellement,
j’utilise wamp, qui répond sans problème à toutes mes attentes et permet de basculer entre les
versions de PHP et de MySQL en un simple clic.
Une solution toute prête, Homestead (https://laravel.com/docs/5.0/homestead), est facile à
mettre en œuvre sous Linux, mais beaucoup moins conviviale avec Windows. Pour ce dernier, il
existe une autre possibilité bien pensée : Laragon (https://laragon.org/).
Quelle que soit l’application que vous utilisez, vérifiez que vous avez la bonne version de PHP
(minimum 5.5.9). En outre, les extensions PDO, Tokenizer, OpenSSL et Mbstring de PHP
doivent être activées.
Composer
Présentation
Je vous ai dit que Laravel utilise des composants d’autres sources. Plutôt que de les
incorporer directement, il utilise un gestionnaire de dépendances : Composer. D’ailleurs,
les composants de Laravel sont aussi traités comme des dépendances. De quoi s’agit-il ?
Imaginez que vous créez une application PHP et que vous utilisez des composants
issus de différentes sources : Carbon pour les dates, Redis pour les données… Une
Première partie – Les bases de Laravel
méthode laborieuse consiste à aller chercher tout cela de façon manuelle, et vous allez
être confrontés à des difficultés :
• télécharger tous les composants dont vous avez besoin et les placer dans votre struc-
ture de dossiers ;
• traquer les éventuels conflits de nommage entre les bibliothèques ;
• mettre à jour manuellement les bibliothèques quand c’est nécessaire ;
• prévoir le code pour charger les classes à utiliser…
Tout cela est évidemment faisable, mais avouez qu’il serait bien agréable d’automatiser
ces procédures. C’est justement ce que fait un gestionnaire de dépendances !
Installation
Laravel utilise Composer comme gestionnaire de dépendances. Il vous faut donc com-
mencer par l’installer sur votre ordinateur. Selon votre système, la procédure est dif-
férente ; je vous renvoie donc au site https://getcomposer.org/ pour obtenir tous les
renseignements sur le sujet.
Pour Windows, il suffit de télécharger un installeur (https://getcomposer.org/download/),
qui fait tout très proprement et renseigne aussi la variable d’environnement PATH, ce
qui rend Composer utilisable depuis n’importe quel emplacement. En revanche, l’ins-
talleur vous demandera où se trouve php.exe et vous devrez répondre, car Composer
est un fichier PHP et a besoin d’être exécuté.
Pour les autres systèmes, en particulier Linux, le plus simple est d’utiliser curl. Il suffit
de suivre les instructions détaillées sur le site.
Pour aller plus loin avec Composer, vous pouvez lire l’article suivant : http://laravel.sillo.
org/jouer-avec-composer/.
Fonctionnement
{
"nom": "Durand",
"prénom": "Jean"
}
Les étiquettes sont "nom" et "prénom" ; les valeurs correspondantes sont "Durand"
et "Jean". Les valeurs peuvent être aussi des tableaux ou des objets. Regardez ce
second exemple :
10
Chapitre 2. Installation et organisation
{
"identité1" : {
"nom": "Durand",
"prénom": "Jean"
},
"identité2" : {
"nom": "Dupont",
"prénom": "Albert"
}
}
Composer a besoin d’un fichier composer.json, qui contient les instructions néces-
saires : les dépendances, les classes à charger automatiquement… Voici un extrait de
ce fichier pour Laravel :
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*"
},
...
}
Prérequis
11
Première partie – Les bases de Laravel
Cet ouvrage a été créé avec la version 5.2.* de Laravel. Lorsque vous créez une nouvelle
application, que ce soit avec composer create-project ou avec l’installeur,
vous obtenez la dernière version stable. Sur OpenClassrooms.com, je m’efforcerai de
garder ce cours en phase avec l’évolution de Laravel, mais il y aura toujours un délai
! entre la sortie d’une nouvelle version et cet ouvrage. Si vous rencontrez des différences
de fonctionnement avec les exemples utilisés, vous pouvez toujours, en attendant la
mise à niveau de l’ouvrage installer la version précédente de Laravel. Il suffit d’utiliser
la commande create-project en spécifiant la version comme troisième argument
(voir la documentation complète sur https://getcomposer.org/doc/03-cli.md#create-
project).
Il y a plusieurs façons de créer une application Laravel. Celle qui me semble la plus
simple consiste à utiliser la commande create-project de Composer. Par exemple,
si je veux créer une application dans un dossier laravel5 à la racine de mon serveur,
voici la syntaxe à utiliser :
L’installation démarre et je n’ai plus qu’à attendre quelques minutes pour que Composer
fasse son travail jusqu’au bout. Une liste de téléchargements s’affiche, pour finalement
se retrouver avec l’architecture suivante.
12
Chapitre 2. Installation et organisation
Sous Windows avec Wamp, il est possible d’avoir un souci pour afficher la page d’accueil.
Si c’est votre cas, il y a trois solutions.
Pour les mises à jour ultérieures, il suffit d’utiliser encore Composer, mais avec la
commande update :
composer update
Une autre solution consiste à utiliser l’installeur de Laravel. Il faut commencer par
installer globalement l’installeur avec Composer :
13
Première partie – Les bases de Laravel
Autorisations
Au niveau des dossiers de Laravel, le seul qui ait besoin de droits d’écriture par le
serveur est storage.
Serveur
URL propres
Pour un serveur Apache, il est prévu dans le dossier public un fichier .htaccess
avec ce code :
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
Le but est d’éviter d’avoir index.php dans l’URL. Cependant, pour que cela fonc-
tionne, il faut activer le module mod_rewrite.
Une autre façon d’obtenir un Laravel sur mesure est d’utiliser mon outil en ligne http://
laravel-designer.sillo.org/, décrit à l’adresse http://laravel.sillo.org/laravel-designer/.
14