9782212144031

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 36

Alexandre Bacco

DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

symfony3
Vous dveloppez des sites web rgulirement et vous en avez assez de rinventer la roue ? Vous aimeriez
utiliser les bonnes pratiques de dveloppement PHP pour concevoir des sites de qualit professionnelle ?
Cet ouvrage vous permettra de prendre en main Symfony, le framework PHP de rfrence. Comment
crer un nouveau projet avec Symfony, mettre en place les environnements de test et de production,
concevoir les contrleurs, les templates, grer la traduction et communiquer avec une base de donnes Alexandre Bacco
via Doctrine ? Vous dcouvrirez comment ce puissant framework, support par une large communaut, va
vous faire gagner en efficacit.
Prface de Fabien Potencier

Quallez-vous apprendre ? propos de lauteur

symfony3
Vue densemble de Symfony Passionn de dveloppement web, Alexandre
DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

symfony3
Symfony, un framework PHP Bacco participe la cration de la version 3
Vous avez dit Symfony ? dOpenClassrooms durant ses tudes. Diplm
Utiliser la console pour crer un bundle de lcole Centrale de Lyon, une cole
dingnieur gnraliste, il tombe sous le charme
Les bases de Symfony

DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK


du framework Symfony avant mme sa sortie
Mon premier Hello World ! avec Symfony et dcide de partager ses connaissances en
Le routeur de Symfony rdigeant un cours sur OpenClassrooms et pour
Les contrleurs avec Symfony les ditions Eyrolles.
Le moteur de templates Twig
Installer un bundle grce Composer
Les services, thorie et cration
Lesprit dOpenClassrooms
Grer la base de donnes avec Doctrine2
Des cours ouverts, riches et vivants, conus
La couche mtier : les entits
pour tous les niveaux et accessibles
Manipuler ses entits avec Doctrine2
tous gratuitement sur notre plate-forme
Les relations entre entits avec Doctrine2 de-ducation : www.openclassrooms.com.
Rcuprer ses entits avec Doctrine2 Vous y vivrez une vritable exprience com-
Les vnements et extensions Doctrine munautaire de lapprentissage, permettant
TP : consolidation de notre code chacun dapprendre avec le soutien et
Aller plus loin avec Symfony laide des autres tudiants sur les forums.
Crer des formulaires avec Symfony Vous profiterez des cours disponibles par-
Valider ses donnes tout, tout le temps : sur le Web, en PDF, en
Scurit et gestion des utilisateurs eBook, en vido
Les services, fonctions avances
Le gestionnaire dvnements de Symfony
Traduire son site
Prparer la mise en ligne
Convertir les paramtres de requtes
ISBN : 978-2-212-14403-1

Personnaliser les pages derreur


Code diteur : G14403

Utiliser Assetic pour grer les codes CSS et JS 29,90 E


Utiliser la console depuis le navigateur
Dployer son site Symfony en production
Couverture : Studio Eyrolles Groupe Eyrolles

G14403_DeveloppezVotreSiteWebAvecSymfony3EXE.indd 1 19/09/2016 16:43


Alexandre Bacco
DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

symfony3
Vous dveloppez des sites web rgulirement et vous en avez assez de rinventer la roue ? Vous aimeriez
utiliser les bonnes pratiques de dveloppement PHP pour concevoir des sites de qualit professionnelle ?
Cet ouvrage vous permettra de prendre en main Symfony, le framework PHP de rfrence. Comment
crer un nouveau projet avec Symfony, mettre en place les environnements de test et de production,
concevoir les contrleurs, les templates, grer la traduction et communiquer avec une base de donnes Alexandre Bacco
via Doctrine ? Vous dcouvrirez comment ce puissant framework, support par une large communaut, va
vous faire gagner en efficacit.
Prface de Fabien Potencier

Quallez-vous apprendre ? propos de lauteur

symfony3
Vue densemble de Symfony Passionn de dveloppement web, Alexandre
DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

symfony3
Symfony, un framework PHP Bacco participe la cration de la version 3
Vous avez dit Symfony ? dOpenClassrooms durant ses tudes. Diplm
Utiliser la console pour crer un bundle de lcole Centrale de Lyon, une cole
dingnieur gnraliste, il tombe sous le charme
Les bases de Symfony

DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK


du framework Symfony avant mme sa sortie
Mon premier Hello World ! avec Symfony et dcide de partager ses connaissances en
Le routeur de Symfony rdigeant un cours sur OpenClassrooms et pour
Les contrleurs avec Symfony les ditions Eyrolles.
Le moteur de templates Twig
Installer un bundle grce Composer
Les services, thorie et cration
Lesprit dOpenClassrooms
Grer la base de donnes avec Doctrine2
Des cours ouverts, riches et vivants, conus
La couche mtier : les entits
pour tous les niveaux et accessibles
Manipuler ses entits avec Doctrine2
tous gratuitement sur notre plate-forme
Les relations entre entits avec Doctrine2 de-ducation : www.openclassrooms.com.
Rcuprer ses entits avec Doctrine2 Vous y vivrez une vritable exprience com-
Les vnements et extensions Doctrine munautaire de lapprentissage, permettant
TP : consolidation de notre code chacun dapprendre avec le soutien et
Aller plus loin avec Symfony laide des autres tudiants sur les forums.
Crer des formulaires avec Symfony Vous profiterez des cours disponibles par-
Valider ses donnes tout, tout le temps : sur le Web, en PDF, en
Scurit et gestion des utilisateurs eBook, en vido
Les services, fonctions avances
Le gestionnaire dvnements de Symfony
Traduire son site
Prparer la mise en ligne
Convertir les paramtres de requtes
Personnaliser les pages derreur
Utiliser Assetic pour grer les codes CSS et JS
Utiliser la console depuis le navigateur
Dployer son site Symfony en production

G14403_DeveloppezVotreSiteWebAvecSymfony3EXE.indd 1 19/09/2016 16:43


DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

SYMFONY3
DANS LA MME COLLECTION

M. Chavelli. Dcouvrez le framework PHP Laravel.


N14398, 2016, 336pages.
R. De Visscher. Dcouvrez le langage Swift.
N14397, 2016, 128pages.
M. Lorant. Dveloppez votre site web avec le framework Django.
N21626, 2015, 285pages.
E. Lalitte. Apprenez le fonctionnement des rseaux TCP/IP.
N21623, 2015, 300pages.
M. Nebra, M. Schaller. Programmez avec le langage C++.
N21622, 2015, 674pages.

SUR LE MME THME

P. Martin, J. Pauli, C. Pierre de Geyer, . Daspet. PHP 7 avanc.


N14357, 2016, 732pages.
R. Goetter. CSS 3 Flexbox.
N14363, 2016, 152pages.
W. McKinney. Analyse de donnes en Python.
N14109, 2015, 488pages.
E. Biernat, M. Lutz. Data science : fondamentaux et tudes de cas.
N14243, 2015, 312pages.
B. Philibert. Bootstrap 3: le framework 100 % web design.
N14132, 2015, 318pages.
C. Camin. Dvelopper avec Symfony2.
N14131, 2015, 474pages.
S. Pittion, B. Siebman. Applications mobiles avec Cordova et PhoneGap.
N14052, 2015, 184pages.
C. Delannoy. Le guide complet du langage C.
N14012, 2014, 844pages.

Retrouvez nos bundles (livres papier + e-book) et livres numriques sur


http://izibook.eyrolles.com
Alexandre Bacco
Prface de Fabien Potencier

DVELOPPEZ VOTRE SITE WEB AVEC LE FRAMEWORK

SYMFONY3
DITIONS EYROLLES
61, bd Saint-Germain
75240 Paris Cedex 05
www.editions-eyrolles.com

En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le


prsent ouvrage, sur quelque support que ce soit, sans lautorisation de lditeur ou du Centre Franais
dexploitation du droit de copie, 20, rue des Grands Augustins, 75006 Paris.

Groupe Eyrolles, 2016. ISBN Eyrolles : 978-2-212-14403-1


OpenClassrooms, 2016
Prface
Pendant longtemps, PHP a t dcri et critiqu par les dveloppeurs professionnels
pour son ct rustique et simpliste: un langage pour les dveloppeurs du dimanche.
Pourtant, en dpit de ces critiques et de cette image maintenant date, PHP est un
langage qui a su voluer, se structurer, se professionnaliser. Tant et si bien que cest
aujourdhui de loin le langage dominant du Web. lui seul, PHP motorise prs de
70% des sites web dans le monde. De nombreux sites trs fortes audiences que vous
consultez rgulirement sont motoriss par PHP.
En 2005, je dirigeais Sensio, une agence web parisienne cre sept ans plus tt avec
mon associ Grgory Pascal. Pour professionnaliser nos mthodes de travail et capi-
taliser sur notre savoir-faire, je dcidais de crer un framework, dabord rserv nos
usages internes. La version5 de PHP venait de sortir, proposant les premiers outils
PHP rellement destins aux professionnels: Mojavi, Propel, PHPUnit... Cest donc sur
PHP que nous avons concentr nos efforts.
Assez rapidement, je mettais disposition de tous les dveloppeurs intresss notre
travail en licence open source. Symfony tait n.
En 2011, nous avons lanc Symfony2 et franchit une nouvelle tape. Le succs fut
phnomnal et ladoption dans le monde entier na fait que crotre depuis: chaque
mois, Symfony est tlcharg plus dun million de fois sur le site symfony.com et nous
estimons que prs de 300000dveloppeurs dans le monde utilisent cette technologie.
Pourquoi un tel succs?
Tour dabord, parce que tous ceux qui contribuent Symfony sont anims par une forte
culture open source o chacun met disposition de tous le fruit de son travail. Le projet
a dabord attir des dizaines puis des centaines de dveloppeurs qui ont progressive-
ment faire de Symfony le framework de choix pour les dveloppeurs professionnels.
Ensuite, parce que Symfony est un projet trs dynamique qui volue trs rgulirement
pour accompagner les volutions du Web et les demandes croissantes des utilisateurs.
Dveloppez votre site web avec le framework Symfony3

Enfin, parce que la structure originale de Symfony un framework mais aussi des com-
posants autonomes a sduit de nombreux projets open source dimportance (Drupal,
EZ Publish, PhpBB, etc.) et les a conduits asseoir leur dveloppement sur le projet
Symfony. La version8 de Drupal par exemple intgre plus de 10composants essentiels
de Symfony. Cette large adoption par dautres projets open source, mais aussi par de
nombreux projets commerciaux a permis de crdibiliser et de populariser plus encore
le framework.
Et vous dans tout cela?
En dcidant dacheter et de lire ce livre, vous faites probablement vos premiers pas
dans une technologie mais aussi une communaut unique. Dans les mois venir, peut-
tre utiliserez-vous Symfony pour dvelopper des projets pour des clients, aurez-vous
besoin de consulter de la documentation, dchanger avec dautres utilisateurs, vous
retrouverez-vous lors dvnements annuels (les Symfony Live) pour changer avec vos
pairs? Quels que soient vos besoins, le site symfony.com vous offrira les ressources
ncessaires.
Et puis, avec la pratique et lexprience, jespre que vous rejoindrez un jour les contri-
buteurs dvous qui font chaque jour le succs de Symfony.
Dici l, je vous souhaite une excellente lecture!

Fabien Potencier
Crateur de Symfony et prsident de SensioLabs
Table des matires
Introduction 1

Premire partie Vue densemble de Symfony 3

1 Symfony, un frameworkPHP 5
Quest-ce quun framework?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Lobjectif dun framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Dfinition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Objectif dun framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Pesons le pour et le contre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Alors, convaincus?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Quest-ce que Symfony?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Un framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Un framework populaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Un framework populaire et franais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Quest-il possible de faire avec Symfony? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Tlcharger Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Vrifier linstallation de PHP en console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Obtenir Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Droits daccs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Vous avez dit Symfony? 15


Larchitecture des fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Liste des rpertoires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Le rpertoire /app. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Dveloppez votre site web avec le framework Symfony3

Le rpertoire /bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le rpertoire /src. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le rpertoire /tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le rpertoire /var. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le rpertoire /vendor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Le rpertoire /web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
retenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Le contrleur frontal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Larchitecture conceptuelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Architecture MVC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Parcours dune requte dans Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Symfony et ses bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
La dcoupe en bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Lintrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
La bonne pratique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Les bundles de la communaut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
La structure dun bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3 Utilisons laconsole pourcrer unbundle 27


Utilisation de la console. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Sous Linux et Mac. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
quoi cela sert-il?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Comment cela marche-t-il?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Le fil rouge de notre cours: une plate-forme dchange. . . . . . . . . . . . . . . . . 30
Crons notre bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Tout est bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Excuter la bonne commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Que sest-il pass?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Deuxime partie Les bases de Symfony 37

4 Mon premier Hello World! avec Symfony 39


Crer sa route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Quel est le rle du routeur? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Crer son fichier de routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Informer Symfony que nous avons des routes pourlui. . . . . . . . . . . . . . . . . . . . . 41
Crer son contrleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Quel est le rle du contrleur? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Crer Notre contrleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

VIII
Table des matires

Crer son template Twig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43


Les templates avec Twig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Utiliser Twig avec Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Lobjectif: crer une plate-forme dannonces. . . . . . . . . . . . . . . . . . . . . . . . . . 47
Un peu de nettoyage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Schma de dveloppement sous Symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5 Le routeur deSymfony 51
Le fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Fonctionnement du routeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Convention pour le nom du contrleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Les routes de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Crer une route . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Crer une route avec des paramtres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Les routes avances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Crer une route avec des paramtres et leurs contraintes. . . . . . . . . . . . . . . . . . . 57
Utiliser des paramtres facultatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Utiliser des paramtres systme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Ajouter un prfixe lors de limport de nos routes. . . . . . . . . . . . . . . . . . . . . . . . . 60
Gnrer des URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Pourquoi gnrer des URL?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Comment gnrer des URL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Application: les routes de notre plate-forme. . . . . . . . . . . . . . . . . . . . . . . . . . 63
Page daccueil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Page de visualisation dune annonce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Ajout, modification et suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Rcapitulatif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

6 Les contrleurs avec Symfony 67


Le rle du contrleur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Retourner une rponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Manipuler lobjet Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Les paramtres de la requte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Les autres mthodes de lobjet Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Savoir si la requte est une requte Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Manipuler lobjet Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Dcomposition de la construction dun objet Response . . . . . . . . . . . . . . . . . . . . 73
Rponses et vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

IX
Dveloppez votre site web avec le framework Symfony3

Rponse et redirection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Changer le Content-type de la rponse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Manipuler la session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Application: le contrleur de notre plate-forme. . . . . . . . . . . . . . . . . . . . . . . . 81
retenir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Lerreur404. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
La dfinition des mthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Tester les types derreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

7 Le moteur detemplates Twig 87


Les templates Twig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Intrt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Des pages web, mais aussi des e-mails et autres. . . . . . . . . . . . . . . . . . . . . . . . . 88
En pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
savoir. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Afficher des variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Syntaxe lmentaire pour afficher des variables. . . . . . . . . . . . . . . . . . . . . . . . . . 89
Prcisions sur la syntaxe {{ objet.attribut }} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Les filtres utiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Twig et la scurit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Les variables globales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Structures de contrle et expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Les structures de contrle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Les tests utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Hriter et inclure des templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Lhritage de template. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Linclusion de templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Linclusion de contrleurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Application: les templates de notre plate-forme . . . . . . . . . . . . . . . . . . . . . . . 103
Layout gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Layout du bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Les templates finaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

8 Installer un bundle grce Composer 115


Composer, quest-ce que cest?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Un gestionnaire de dpendances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Comment Composer sait-il o trouver les bibliothques?. . . . . . . . . . . . . . . . . . . 116
Un outil innovant dans lcosystmePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Concrtement, comment fonctionne Composer? . . . . . . . . . . . . . . . . . . . . . . . . 116

X
Table des matires

Installer Composer etGit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116


Installer Composer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Installer Git. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Installer un bundle grce Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Manipulons Composer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Mettons jour Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Installer un bundle avec Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Grer manuellement lautoload dune bibliothque. . . . . . . . . . . . . . . . . . . . . . . 123
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

9 Les services, thorie etcration 125


Pourquoi utiliser des services?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Gense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Quest-ce quun service?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Lavantage de la programmation oriente services. . . . . . . . . . . . . . . . . . . . . . . . 126
Le conteneur de services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Comment dfinir les dpendances entre services? . . . . . . . . . . . . . . . . . . . . . . . 129
Le partage des services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Utiliser un service en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Crer un service simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Crer la classe du service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Configurer le service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Utiliser le service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Crer un service avec des arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Injecter des arguments dans nos services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Injecter des dpendances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Aperu du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Troisime partie Grer la base de donnes avecDoctrine2 141

10 La couche mtier: lesentits 143


Notions dORM: utiliser des objets la place des requtes . . . . . . . . . . . . . . . 143
Crer une premire entit avec Doctrine2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Une entit, cest juste un objet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Une entit, cest juste un objet mais avec des commentaires!. . . . . . . . . . . . . . 145
Crer une entit: le gnrateur la rescousse!. . . . . . . . . . . . . . . . . . . . . . . . . 147
Affiner notre entit avec de la logique mtier. . . . . . . . . . . . . . . . . . . . . . . . . . . 149
retenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Tout sur le mapping!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

XI
Dveloppez votre site web avec le framework Symfony3

Lannotation Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151


Lannotation Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Lannotation Column. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

11 Manipuler sesentits avecDoctrine2 157


Matrialiser les tables en base de donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Crer la table correspondante dans la base de donnes. . . . . . . . . . . . . . . . . . . . 157
Modifier une entit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
retenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Utiliser le gestionnaire dentits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Les services Doctrine2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Les repositories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Enregistrer ses entits en base de donnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Doctrine utilise les transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Doctrine simplifie la vie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Les autres mthodes utiles du gestionnaire dentits . . . . . . . . . . . . . . . . . . . . . . 167
Rcuprer ses entits avec un repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

12 Les relations entre entits avec Doctrine2 171


Notions de base sur les relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Entit propritaire et entit inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Relations unidirectionnelle et bidirectionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Relations et requtes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Relation One-To-One . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Prsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Dfinir la relation dans les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Exemple dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Relation Many-To-One . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Prsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Dfinir la relation dans les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Exemple dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Relation Many-To-Many. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Prsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Dfinir la relation dans les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Remplir la base de donnes avec les fixtures. . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Exemples dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Relation Many-To-Many avec attributs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Prsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Dfinir la relation dans les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Remplir la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Exemple dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

XII
Table des matires

Les relations bidirectionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206


Prsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Dfinir la relation dans les entits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

13 Rcuprer sesentits avecDoctrine2 213


Le rle des repositories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Dfinition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Construire ses requtes pour rcuprer des entits . . . . . . . . . . . . . . . . . . . . . . . 214
Les mthodes de rcupration de base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Dfinition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Les mthodes classiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Les mthodes magiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Les mthodes personnelles de rcupration. . . . . . . . . . . . . . . . . . . . . . . . . . . 218
La thorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Le QueryBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
La Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Utiliser le Doctrine Query Language (DQL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Utiliser les jointures dans les requtes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Pourquoi utiliser les jointures?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Comment faire des jointures avec le QueryBuilder?. . . . . . . . . . . . . . . . . . . . . . . 228
Comment utiliser les jointures? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Application: les repositories de notre plate-forme dannonces. . . . . . . . . . . . . 231
Plan dattaque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
vous de jouer! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
La correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

14 Les vnements et extensions Doctrine 235


Les vnements Doctrine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Lintrt des vnements Doctrine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Dfinir des callbacks de cycle devie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Liste des vnements de cycle de vie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Un autre exemple dutilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Utiliser des services pour couter les vnements Doctrine. . . . . . . . . . . . . . . . . . 241
Essayons nos vnements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Les extensions Doctrine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Lintrt des extensions Doctrine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Installer le StofDoctrineExtensionBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Utiliser une extension: lexemple de Sluggable. . . . . . . . . . . . . . . . . . . . . . . . . . 247
Liste des extensions Doctrine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

XIII
Dveloppez votre site web avec le framework Symfony3

15 TP: consolidation de notre code 251


Synthse des entits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Entit Advert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Entit Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Entit Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Entit Category. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Entits Skill et AdvertSkill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Et bien sr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Adaptation du contrleur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Thorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Pratique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Utiliser des jointures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Paginer des annonces sur la page daccueil . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Quatrime partie Aller plus loin avec Symfony 275

16 Crer desformulaires avecSymfony 277


Grer des formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Lenjeu des formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Quest-ce quun formulaire Symfony?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Grer simplement un formulaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Ajouter des champs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Grer de la soumission dun formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Grer les valeurs par dfaut du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Personnaliser laffichage dun formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Crer des types de champs personnaliss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Externaliser la dfinition de ses formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Dfinir le formulaire dans AdvertType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Le contrleur pur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Les formulaires imbriqus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Intrt de limbrication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Un formulaire est un champ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Relation simple: imbriquer un seul formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Relation multiple: imbriquer un mme formulaire plusieurs fois . . . . . . . . . . . . . . 297
Un type de champ trs utile: entity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Loption query_builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Aller plus loin avec les formulaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Lhritage de formulaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
retenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Varier la mthode de construction dun formulaire . . . . . . . . . . . . . . . . . . . . . . . 308
Envoyer des fichiers avec le type de champ File . . . . . . . . . . . . . . . . . . . . . . . . 311

XIV
Table des matires

Le type de champ File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311


Prparer lobjet sous-jacent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Adapter le formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Manipuler le fichier envoy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Automatiser le traitement grce aux vnements . . . . . . . . . . . . . . . . . . . . . . . . 315
Application: les formulaires de notre site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Thorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Pratique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

17 Valider sesdonnes 327


Pourquoi valider des donnes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Toujours se mfier des donnes de lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Lintrt de la validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
La thorie de la validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Dfinir les rgles de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Les diffrents formats de rgles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Dclencher la validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Le service validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
La validation automatique sur les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Encore plus de rgles de validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Valider depuis un accesseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Valider intelligemment un attribut objet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Valider depuis un Callback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Valider un champ unique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Valider selon nos propres contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Crer la contrainte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Crer le validateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Transformer son validateur en service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Dfinition du service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Modifier la contrainte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Modifier du validateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

18 Scurit et gestion desutilisateurs 349


Authentification et autorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Lauthentification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Lautorisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Processus gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Premire approche de la scurit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

XV
Dveloppez votre site web avec le framework Symfony3

Le fichier de configuration de la scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354


Mettre en place un pare-feu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Les erreurs courantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Depuis le contrleur ou un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Depuis une vue Twig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Grer des autorisations avec les rles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Dfinition des rles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Tester les rles de lutilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Pour conclure sur les mthodes de scurisation. . . . . . . . . . . . . . . . . . . . . . . . . . 370
Grer des utilisateurs avec la base de donnes. . . . . . . . . . . . . . . . . . . . . . . . . 370
Qui sont les utilisateurs?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Crons notre classe dutilisateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Crer des utilisateurs de test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Dfinir lencodeur pour la nouvelle classe dutilisateurs . . . . . . . . . . . . . . . . . . . . 373
Dfinir le fournisseur dutilisateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Demander au pare-feu dutiliser le nouveau fournisseur. . . . . . . . . . . . . . . . . . . . 375
Manipuler les utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Utiliser FOSUserBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Installer FOSUserBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Hriter FOSUserBundle depuis le OCUserBundle . . . . . . . . . . . . . . . . . . . . . . . . . 377
Modifier notre entit User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Configurer le bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Mettre jour la table User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Configurer la scurit pour utiliser le bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Configurer le fonctionnement de FOSUserBundle . . . . . . . . . . . . . . . . . . . . . . . . 382
Manipuler les utilisateurs avec FOSUserBundle . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

19 Les services: fonctions avances 389


Les tags sur les services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Les tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Comprendre les tags travers Twig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Appliquer un tag un service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Une classe qui implmente une interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
crire le code qui sera excut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Mthodologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Les principaux tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Les vnements du cur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Les types de champs de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Dpendances optionnelles: les appels de mthodes (calls). . . . . . . . . . . . . . . . 396
Les dpendances optionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Les appels de mthodes (calls) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Lutilit des appels de mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Les services courants de Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

XVI
Table des matires

20 Le gestionnaire dvnements de Symfony 401


Des vnements? Pour quoi faire?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Quest-ce quun vnement?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Quest-ce que le gestionnaire dvnements? . . . . . . . . . . . . . . . . . . . . . . . . . . 402
couter les vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Notre exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Crer un service et son couteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
couter un vnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Crer la mthode excuter de lcouteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Mthodologie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Les vnements Symfony et les ntres!. . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Les vnements Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
Crer ses propres vnements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Allons un peu plus loin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Les souscripteurs dvnements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Lordre dexcution des couteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
La propagation des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

21 Traduire sonsite 429


Introduction la traduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Traduire avec Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Prrequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Mettre en place une page de test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Bonjour le monde. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Le filtre Twig {{ 'string'|trans }}. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
La balise de bloc Twig {%trans%} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Le service translator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Notre vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Le catalogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Les formats de catalogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
La mise en cache du catalogue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Notre traduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Ajouter un nouveau message traduire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Extraire les chanes sources dun site existant . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Traduire dans une nouvelle langue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Rcuprer la locale de lutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Dterminer la locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Routing et locale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Organiser vos catalogues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Utiliser des mots-cls plutt que du texte comme chanes sources. . . . . . . . . . . . . 444
Nicher les traductions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Permettre le retour la ligne au milieu des chanes cibles . . . . . . . . . . . . . . . . . . 446

XVII
Dveloppez votre site web avec le framework Symfony3

Utiliser des listes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447


Utiliser les domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Domaines et bundles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Un domaine spcial: validators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Traductions dpendant de variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Les placeholders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Les placeholders dans le domaine validators. . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Grer les pluriels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Afficher des dates au format local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Pour conclure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

Cinquime partie Prparer la mise en ligne 459

22 Convertir lesparamtres derequtes 461


Thorie: pourquoi convertir des paramtres?. . . . . . . . . . . . . . . . . . . . . . . . . 461
Rcuprer des entits Doctrine avant mme le contrleur. . . . . . . . . . . . . . . . . . . 461
Les convertisseurs de paramtres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Un convertisseur utile: DoctrineParamConverter. . . . . . . . . . . . . . . . . . . . . . . . . 462
Un peu de thorie sur les convertisseurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Pratique: utiliser les convertisseurs existants . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Utiliser le convertisseur Doctrine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Utiliser le convertisseur Datetime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Aller plus loin: crer ses propres convertisseurs. . . . . . . . . . . . . . . . . . . . . . . . 468
Comment sont excuts les convertisseurs?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Comment Symfony trouve-t-il tous les convertisseurs? . . . . . . . . . . . . . . . . . . . . 468
Crer un convertisseur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Lexemple de notre JsonParamConverter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

23 Personnaliser les pages derreur 473


Thorie: remplacer les vues dun bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Constater les pages derreur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Localiser les vues concernes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Remplacer les vues dun bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Comportement de Twig. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Pourquoi tous ces formats error.XXX.twig dans le rpertoire Exception? . . . . . . . . 475
Pratique: remplacer les templates Exception de TwigBundle . . . . . . . . . . . . . . 476
Crer la nouvelle vue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Le contenu dune page derreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

XVIII
Table des matires

24 Utiliser Assetic pour grer les codes CSSetJS de votre site 479
Thorie: entre vitesse et lisibilit, pourquoi choisir? . . . . . . . . . . . . . . . . . . . . 479
propos du nombre de requtes HTTP dune page web. . . . . . . . . . . . . . . . . . . 479
Comment optimiser le front-end? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Amliorer le temps de chargement!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
En action!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Pratique: Assetic la rescousse!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Installer Assetic et les bibliothques de compression . . . . . . . . . . . . . . . . . . . . . . 481
Servir des ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Modifier les ressources servies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Grer le mode prod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Comprendre Assetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Exporter ses fichiers CSSetJS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
Et bien plus encore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

25 Utiliser la console depuis lenavigateur 489


Thorie: le composant Console de Symfony. . . . . . . . . . . . . . . . . . . . . . . . . . 489
Les commandes sont enPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Exemple dune commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Pratique: utiliser un ConsoleBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
ConsoleBundle?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Tlcharger CoreSphereConsoleBundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Enregistrer le bundle dans le kernel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Enregistrer les routes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Publier les assets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Utiliser la console dans son navigateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Prts pour lhbergement mutualis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

26 Dployer son site Symfony enproduction 495


Prparer son application en local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Vider le cache, tout le cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Tester lenvironnement de production . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Soigner ses pages derreur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Installer une console sur navigateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Vrifier la qualit de votre code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Vrifier la scurit de vos dpendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Vrifier et prparer le serveur de production . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Vrifier la compatibilit du serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Dployer votre application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Mthode1: envoyer les fichiers sur le serveur parFTP. . . . . . . . . . . . . . . . . . . . . 501
Mthode2: utiliser loutil Capifony pour envoyer votre application. . . . . . . . . . . . 502

XIX
Dveloppez votre site web avec le framework Symfony3

Les derniers prparatifs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502


Sautoriser lenvironnement de dveloppement. . . . . . . . . . . . . . . . . . . . . . . . . . 503
Mettre en place la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Sassurer que tout fonctionne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Avoir de belles URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Et profitez!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Les mises jour de la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
Une checklist pour vos dploiements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
En rsum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

Index 509
Introduction
Vous dveloppez des sites web rgulirement et vous en avez assez de rinventer la
roue? Vous aimeriez utiliser les bonnes pratiques de dveloppement PHP pour conce-
voir des sites web de qualit professionnelle?
Ce cours vous permettra de prendre en main Symfony, le framework PHP de rfrence.
Pourquoi utiliser un framework? Comment crer un nouveau projet de site web avec
Symfony, mettre en place les environnements de test et de production, concevoir les
contrleurs, les templates, grer la traduction et communiquer avec une base de don-
nes via Doctrine?
Je vous montrerai tout au long de ce cours comment ce puissant framework, adopt par
une large communaut, va vous faire gagner en efficacit. Fabien Potencier, crateur
de Symfony, introduira chacun des chapitres par une vido explicative des principaux
points abords. Les vidos peuvent tre visionnes sur le site web associ au livre
(www.editions-eyrolles.com/dl/0014403).
Premire partie

Vue densemble de Symfony

Commenons par le commencement! Si vous navez aucune exprience dans les


frameworks ni dans larchitecture MVC, cette partie sera trs riche en nouvelles notions.
Avanons doucement mais srement, vous tes l pour apprendre!
1 Symfony, un
frameworkPHP
Dans ce chapitre, nous allons dcouvrir pourquoi Symfony est un bon choix pour votre
application web. Une bote outils faite en PHP qui a pour but de vous simplifier la vie,
cest toujours sympa, non? Allons-y!
Vous savez dj faire des sites Internet? Vous matrisez votre code, mais ntes pas
totalement satisfait? Vous avez trop souvent limpression de rinventer la roue?
Alors ce cours est fait pour vous!
Symfony est un puissant framework qui va vous permettre de raliser des sites
complexes rapidement, mais de faon structure et avec un code clair et maintenable.
En un mot: le paradis du dveloppeur!
Ce cours est destin aux dbutants de Symfony. Vous navez besoin daucune notion
sur les frameworks pour laborder, car nous allons les dcouvrir ensemble, pas pas.
Cependant, il est fortement conseill:
davoir dj une bonne exprience de PHP (consultez le cours Concevez votre
site web avec PHP et MySQL, par Mathieu Nebra: https://openclassrooms.com/
informatique/cours/concevez-votre-site-web-avec-php-et-mysql);
de matriser les notions de base de la POO (consultez le cours La programmation
oriente objet, par Mathieu Nebra: https://openclassrooms.com/informatique/cours/
concevez-votre-site-web-avec-php-et-mysql/la-programmation-orientee-objet-6);
davoir ventuellement des notions sur les espaces de noms, ou namespaces en
anglais (consultez le cours Les espaces de nom, par Victor Thuillier:
https://openclassrooms.com/informatique/cours/les-espaces-de-noms-en-php).

Si vous ne matrisez pas ces trois points, je vous invite vraiment les apprendre avant
de commencer la lecture de ce cours. Symfony requiert ces bases et, si vous ne les avez
pas, vous risquez de mettre plus de temps pour assimiler ce cours. Cest comme acheter
un A380 sans savoir piloter: cest joli mais vous nirez pas bien loin.
Premire partie Vue densemble de Symfony

Alors, vous avez dcid de vous lancer dans Symfony? Parfait, vous ne le regrette-
rez pas! Tout au long de ce cours, nous apprendrons utiliser ce framework et vous
comprendrez petit petit la puissance de cet outil. Commenons tout dabord par les
bases et voyons prcisment quels sont les objectifs et les limites dun framework tel
que Symfony.

Quest-ce quun framework?

Lobjectif dun framework

Lobjectif de ce chapitre nest pas de vous fournir toutes les cls pour concevoir un
framework, mais suffisamment pour pouvoir en utiliser un. On exposera rapidement
lintrt, les avantages et les inconvnients de lutilisation dun tel outil.

Dfinition

Le mot framework provient de langlais frame, qui veut dire cadre en franais, et
work, qui signifie travail. Littralement, cest donc un cadre de travail. Concrtement,
cest un ensemble de composants qui sert crer les fondations, larchitecture et les
grandes lignes dun logiciel. Il existe des centaines de frameworks couvrant la plupart
des langages de programmation. Ils sont destins au dveloppement de sites web ou
bien la conception de logiciels.
Un framework est une bote outils conue par au moins un dveloppeur destination
dautres dveloppeurs. Contrairement certains scripts tels que WordPress, Dotclear
ou autres, un framework nest pas utilisable tel quel. Il nest pas conu pour les utilisa-
teurs finaux. Le dveloppeur qui se sert dun framework a encore du travail fournir,
do ce cours!

Objectif dun framework

Lobjectif premier dun framework est damliorer la productivit des dveloppeurs


qui lutilisent. Plutt sympa, non? Souvent organis en diffrents c omposants,
un framework offre la possibilit au dveloppeur final dutiliser tel ou tel
composant pour lui faciliter le dveloppement et ainsi de se concentrer sur le plus
important.
Prenons un exemple concret. Il existe dans Symfony un composant qui gre les for-
mulaires HTML: leur affichage, leur validation, etc. Le dveloppeur qui lutilise se
concentre sur lessentiel dans son application: chaque formulaire effectue une action
et cest cette action qui est importante, pas les formulaires. tendez ce principe toute
une application ou tout un site Internet et vous comprenez lintrt dun framework!
Autrement dit, le framework soccupe de la forme et permet au dveloppeur de se
concentrer sur le fond.

6
Chapitre1.Symfony, un frameworkPHP

Pesons le pour et le contre

Comme tout bon dveloppeur, lorsquon veut utiliser un nouvel outil, on doit en peser
le pour et le contre pour tre sr de faire le bon choix!

Le pour
Lavantage premier est donc, on vient de le voir, le gain en productivit. Mais il en
existe bien dautres! On peut les classer en plusieurs catgories: le code, le travail et
la communaut.
Tout dabord, un framework vous aide raliser un bon code, cest--dire quil
vous incite, de par sa propre architecture, bien organiser votre code. Et un code bien
organis est volutif et facile maintenir! De plus, un framework offre des briques
prtes lemploi (le composant Form de Symfony par exemple), ce qui vous vite
de rinventer la roue, et surtout qui vous permet dutiliser des briques puissantes et
prouves. En effet, ces dernires sont dveloppes par des quipes de dveloppeurs
chevronns; elles sont donc trs flexibles et trs robustes. Vous conomisez ainsi des
heures de dveloppement!
Ensuite, un framework amliore la faon dont vous travaillez. En effet, dans le cas
dun site Internet, vous travaillez souvent avec dautres dveloppeurs PHP et un desi-
gner. Un framework vous aide doublement dans ce travail en quipe. Dune part, un
framework utilise presque toujours larchitecture MVC; on en reparlera, mais sachez
pour le moment que cest une faon dorganiser son code en sparant le PHP du HTML.
Ainsi, votre designer peut travailler sur des fichiers diffrents des vtres; finis les
problmes ddition simultane dun mme fichier! Par ailleurs, un framework a une
structure et des conventions de code connues. Ainsi, vous pouvez facilement recruter
un autre dveloppeur: sil connat dj le framework en question, il sintgrera trs
rapidement au projet.
Enfin, le dernier avantage est la communaut soutenant chaque framework. Cest
elle qui fournit les tutoriels ou les cours (comme celui que vous lisez!), de laide
sur les forums et, bien sr, les mises jour du framework. Ces dernires sont trs
importantes: imaginez que vous codiez vous-mmes tout ce qui est connexion uti-
lisateur, session, moteur de templates, etc. Comme il est impossible de coder sans
bogues, vous devriez logiquement corriger chaque erreur dclare sur votre code.
Maintenant, imaginez que toutes les briques de votre site, qui ne sont pas forcment
votre tasse de th, soient fournies par le framework. chaque fois que vous ou les
milliers dautres utilisateurs du framework trouverez une bogue, les dveloppeurs et
la communaut soccuperont de le corriger et vous naurez plus qu suivre les mises
jour. Un vrai paradis!
Il existe plein dautres avantages que je ne vais pas vous dtailler, mais un framework,
cest aussi:
une communaut active qui utilise le framework et qui contribue en retour;
une documentation de qualit et rgulirement mise jour;
un code source maintenu par des dveloppeurs attitrs;

7
Premire partie Vue densemble de Symfony

un code qui respecte les standards de programmation;


un support long terme garanti et des mises jour qui ne cassent pas la compatibilit;
etc.

Le contre
Vous vous en doutez, avec autant davantages il y a forcment des inconvnients. Et
bien, figurez-vous quil ny en a pas tant que a!
Sil ne fallait en citer quun, cela serait videmment la courbe dapprentissage qui est
plus leve. En effet, pour matriser un framework, il faut un temps dapprentissage
non ngligeable. Chaque brique qui compose un framework a sa complexit propre quil
vous faudra apprhender.
Notez galement que pour les frameworks les plus rcents, tels que Symfony justement,
il faut tre au courant des dernires nouveauts de PHP. Connatre certaines bonnes
pratiques telles que larchitecture MVC est un plus.
Toutefois, rien de tout cela ne doit vous effrayer! Voyez lapprentissage dun framework
comme un investissement: il y a un certain effort fournir au dbut, mais les rsultats
se rcoltent ensuite sur le long terme!

Alors, convaincus?

Jespre vous avoir convaincus que le pour lemporte largement sur le contre. Si vous
tes prts relever le dfi aujourdhui pour tre plus productifs demain, alors ce cours
est fait pour vous!

Quest-ce que Symfony?

Un framework

Symfony est donc un framework PHP. Bien sr, il en existe dautres: Zend
Framework (http://framework.zend.com/), CodeIgniter (http://codeigniter.com/), CakePHP
(http://cakephp.org/), etc. Le choix dun framework est assez personnel et doit tre
adapt au projet engag. Sans vouloir prcher pour ma paroisse, Symfony est lun des
plus flexibles et des plus puissants.

Un framework populaire

Symfony est trs populaire. Cest un des frameworks les plus utiliss dans le monde,
notamment dans les entreprises. Citons Dailymotion par exemple! La premire ver-
sion de Symfony est sortie en 2005 et est aujourdhui toujours trs rpandue. Cela lui
apporte un retour dexprience et une notorit exceptionnels. Aujourdhui, beaucoup
dentreprises dans le domaine dInternet (dont OpenClassrooms!) recrutent des dve-
loppeurs capables de travailler sous ce framework. Ces dveloppeurs pourront ainsi

8
Chapitre1.Symfony, un frameworkPHP

se greffer aux projets de lentreprise trs rapidement, car ils en connatront dj les
grandes lignes. Cest un atout si vous souhaitez travailler dans ce domaine.
La deuxime version est sortie en aot 2011. Son dveloppement a t fulgurant grce
une communaut de dveloppeurs dvous. Bien que diffrente dans sa conception,
cette deuxime version est plus rapide et plus souple que la premire. Trs rapidement
aprs sa sortie, de nombreuses entreprises sarrachaient dj les comptences des
dveloppeurs Symfony2.
Enfin la troisime version, que nous tudierons dans ce cours, est la maturation de la
version2. Elle sinscrit dans la continuit de la prcdente et vient en supprimer tous
les points dprcis qui freinaient son dveloppement. La version3 est donc une ver-
sion2 amliore, qui fait table rase des quelques erreurs de jeunesse et ouvre la voie
encore plus dvolution lavenir! Contrairement au passage entre les deux premires
moutures, le passage entre les versions 2et3 se fait relativement facilement; vous
navez pas rcrire votre code pour mettre jour!
Comme vous pouvez le voir, Symfony se dveloppe vive allure et aujourdhui il est
presque incontournable en entreprise. Faites partie de la communaut!

Un framework populaire et franais

Et, oui, Symfony, lun des meilleurs frameworks PHP au monde, est franais! Il est
dit par la socit SensioLabs (http://sensiolabs.com/), dont le crateur est Fabien
Potencier. Cependant, Symfony tant open source, il a galement t crit par toute
la communaut: beaucoup de Franais, mais aussi des dveloppeurs de tous horizons:
Europe, tats-Unis, etc. Cest grce au talent de Fabien et la gnrosit de la
communaut que Symfony a vu le jour.

Quest-il possible de faire avec Symfony?

Avec Symfony, comme avec beaucoup de frameworks PHP, vous ntes limits
que par votre imagination! En effet, il est possible de tout faire: ce nest pas le
framework qui vous posera des limites, il ne met en place quun cadre de travail. Libre
vous dutiliser ce cadre comme bon vous semble! Je vous ai parl de Dailymotion
(http://www.dailymotion.com/fr), un site de partage de vidos, mais vous pouvez galement
crer un site e-commerce, comme je lai fait avec Caissin (https://www.caissin.fr/)
ou encore un site plus complexe tel quOpenClassrooms (https://openclassrooms.com/),
qui tourne galement sur Symfony.
Cest lune des forces de Symfony: il vous permet de crer le site Internet de vos rves
en vous fournissant tous les outils ncessaires pour y arriver avec succs.

9
Premire partie Vue densemble de Symfony

Tlcharger Symfony

Vrifier linstallation de PHP en console

Nous aurons parfois besoin dexcuter des commandes PHP via la console pour gnrer
du code ou grer la base de donnes. Ce sont des commandes qui vont nous faire gagner
du temps (toujours le mme objectif!). Vrifions donc que PHP est bien disponible
en console. Rassurez-vous, je vous indiquerai toujours pas pas comment les utiliser.
Si vous tes sous Linux ou Mac, vous ne devriez pas avoir de souci; PHP est bien
disponible en console. Si vous tes sous Windows, rien nest sr. Dans tous les cas,
vrifiez-le en ouvrant linvite de commandes pour Windows, ou le terminal pour Linux.

Sous Windows
Lancez linvite de commandes: Menu Dmarrer>Programmes>Accessoires>Invite
de commandes. Une fentre semblable la figure suivante devrait apparatre.

La console Windows

Puis excutez la commande suivante:

C:\Users\winzou> php-v
PHP 5.5.12 (cli) (built: Apr 30 2014 11:20:55)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies


10
Chapitre1.Symfony, un frameworkPHP

Sous Linux et Mac


Ouvrez le terminal et excutez la mme commande:

winzou@laptop:~$ php-v

Si tout va bien
Si cette commande vous retourne bien la version de PHP et dautres informations,
tout est bon. Profitez-en pour vrifier votre version de PHP; nous aurons besoin ici
de la version5.5 au minimum. Si vous avez PHP5.4 ou infrieur, vous devez dabord
le mettre jour.

En cas derreur
Si vous tes sous Windows et si la commande affiche une erreur, votre PHP est sre-
ment bien install, mais Windows ne sait pas o le trouver; il faut juste lui montrer le
chemin. Voici la dmarche suivre pour rgler ce problme.
1. Allez dans les paramtres systme avancs (Dmarrer>Panneau de configura-
tion>Systme et scurit>Systme>Paramtres systme avancs).
2. Cliquez sur le bouton Variables denvironnement
3. Regardez dans le panneau Variables systme.
4. Trouvez lentre Path (vous devriez avoir faire descendre lascenseur pour la
trouver) et double-cliquez dessus.
5. Entrez votre rpertoire PHP la fin, sans oublier le point-virgule en dbut de
ligne. Cest le rpertoire dans lequel se trouve le fichier php.exe; par exemple,
C:\wamp\bin\php\php5.5.12.
6. Confirmez en cliquant surOK. Vous devez ensuite redmarrer linvite de com-
mandes pour prendre en compte les changements.

Si vous tes sous Linux, vrifiez votre installation de PHP. Vous devez notamment avoir
le paquet php5-cli, qui est la version console dePHP.
Dans les deux cas, vrifiez aprs vos manipulations que le problme est bien rsolu.
Pour cela, excutez nouveau la commande php-v. Elle devrait alors vous afficher
la version dePHP.
Et voil, votre poste de travail est maintenant oprationnel pour dvelopper avec
Symfony!

Obtenir Symfony

Ce cours a t crit pour la version3.0 de Symfony (sortie fin novembre2015).


Symfony3.0 tant totalement compatible avec la version2.8, vous pouvez suivre le
cours mme si vous tes sur la branche 2.x en version 2.8. En revanche, certains points
pourront tre incompatibles avec les versions infrieures 2.8. La transition se fait
facilement, alors pensez vous mettre jour!

11
Premire partie Vue densemble de Symfony

Il existe de nombreux moyens dobtenir Symfony. Nous allons voir ici la mthode recom-
mande: le Symfony Installer. Il sagit dun petit fichier PHP (un package PHAR en
ralit) tlcharger puis excuter sur votrePC.
Rendez-vous ladresse suivante: http://symfony.com/installer. Cela va tlcharger un
fichier symfony.phar, que vous devez dplacer dans votre rpertoire /web habituel,
par exemple C:\wamp\www pour Windows ou /var/www pour Linux.
Ce fichier permet dexcuter plusieurs commandes, mais la seule qui nous intresse
pour linstant est new, qui cre un nouveau projet Symfony en partant de zro.
Puis allez dans le rpertoire o vous avez plac le fichier symfony.phar, en utilisant
la commande cd (je vous laisse adapter la commande si vous tes sous Linux ou Mac):

Microsoft Windows [version 10.0.10586]


(c) 20015 Microsoft Corporation. Tous droits rservs.

C:\Users\winzou> cd ../../wamp/www
C:\wamp\www> _

Sous Windows, vous avez galement la possibilit de vous rendre dans votre rpertoire
/web via lexplorateur de fichiers et de cliquer-droit en appuyant en mme temps
sur la touche Maj de votre clavier. Dans le menu contextuel, choisissez Ouvrir une
fentre de commandesici.

Maintenant, excutons la commande suivante pour crer un nouveau projet dans le


rpertoire Symfony:

C:\wamp\www> php symfony.phar new Symfony


Downloading Symfony...
4.97 B/4.97 MB ==================================> 100%
Preparing project...
OK Symfony 3.0.0 was successfully installed. Now you can:
* Change your current directory to D:\www\Symfony
* Configure your application in app/config/parameters.yml file.
* Run your application:
1. Execute the php bin/console server:run command.
2. Browse to the http://localhost:8000 URL.
* Read the documentation at http://symfony.com/doc
C:\wamp\www>_

Et voil! Vous venez de tlcharger tout le ncessaire pour faire tourner un projet
Symfony dans le rpertoire C:\wamp\www\Symfony (ou /var/www/Symfony sur
Linux).
Pour la suite du cours, je considrerai que les fichiers sont accessibles lURL
http://localhost/Symfony. Je vous recommande davoir la mme adresse, car je ferai ce
genre de liens tout au long du cours.

12
Chapitre1.Symfony, un frameworkPHP

Droits daccs

Je fais un petit apart pour les lecteurs travaillant sous Linux (sous Windows pas de
souci, vous pouvez passer votre chemin). Symfony a besoin dcrire dans le rpertoire
var, il faut donc bien rgler les droits dessus. Pour cela, placez-vous dans le rpertoire
Symfony et videz dabordvar:

rm -rf var/*

Pour ceux qui sont encore en version2.8, les rpertoires dans lesquels Symfony2 crit
! sont app/cache et app/logs. Vous devez donc adapter les commandes ces
rpertoires.

Ensuite, si votre distribution supporte le chmod +a, excutez ces commandes pour dfinir
les bons droits:

TTPDUSER=`psaux |grep-E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx'


H
|grep-v root |head-1 |cut-d\-f1`
sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_

inherit" var
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_

inherit" var

Si vous rencontrez une erreur avec ces commandes (le chmod+a nest pas disponible
partout), excutez les commandes suivantes:

TTPDUSER=`ps aux |grep-E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx'


H
|grep-v root |head-1 |cut-d\-f1`
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var

Enfin, si vous ne pouvez pas utiliser les ACL (utiliss dans les commandes prcdentes),
dfinissez simplement les droits comme suit:

chmod 777 -R var

Voil, vous pouvez ds prsent excuter Symfony, flicitations! Rendez-vous sur la


page http://localhost/Symfony/web/app_dev.php/. Vous devriez avoir quelque chose res-
semblant la figure suivante.

13
Premire partie Vue densemble de Symfony

La page daccueil de Symfony

En rsum

Le mot framework signifie cadre de travail en franais.


Lobjectif principal dun framework est damliorer la productivit des dveloppeurs
qui lutilisent.
Contrairement aux CMS, un framework est destin des dveloppeurs et non des
novices en informatique.
Lapprentissage dun framework est un investissement: il y a un certain effort four-
nir au dbut, mais les rsultats se rcoltent ensuite sur le long terme!
Symfony est un framework PHP trs populaire, franais et trs utilis dans le milieu
des entreprises.

Sur le site OpenClassrooms, vous trouverez la vido dun entretien avec le crateur de
Symfony.
Pour plus dinformations, nhsitez pas consulter les sites suivants:
Symfony http://symfony.com
SensioLabs Connect https://connect.sensiolabs.com

lpoque o nous avons ralis cette interview, Symfony ntait encore quen
version 2 ; cest donc celle-l qui est voque dans la vido. Mais le discours reste
dactualit!

14

Vous aimerez peut-être aussi