Cration dun blog avec Symfony2IntroductionCe tutoriel va vous
guider dans le processus de cration dun blog complet avec Symfony2.
La distribution standard du framework sera utilise, qui inclut les
principaux composants ncessaires la cration de vos propres sites
web. Le tutoriel est dcoup en plusieurs parties, qui couvrent
chacune des aspects diffrents de Symfony2 et de ses composants. Il
est prvu pour tre utilis de la mme manire que Jobeet pour Symfony
1.Chapitres du tutoriel [Partie 1] - Configuration de Symfony2 et
utilisation des templates [Partie 2] - Page de contact :
validateurs, formulaires et envoi demails. [Partie 3] - Le modle
darticle : utilisation de Doctrine 2 et des donnes factices [Partie
4] - Le modle de commentaires : ajouter des commentaires, dpts
Doctrine 2 et migrations. [Partie 5] - Personnalisation de la vue :
extensions Twig, barre latrale et Assetic [Partie 6] - Les tests
unitaires et fonctionnels avec PHPUnitContenuLe but de ce tutoriel
est de couvrir les tches que vous allez rgulirement tre amen
raliser lors de la cration dun site web avec Symfony2.1. Les
bundles2. Les contrleurs3. Les Template (avec Twig)4. Le modle -
Doctrine 25. Les migrations6. Les donnes factices7. Les
validateurs8. Les formulaires9. Le routage10. Gestion des fichiers
externes11. Les emails12. les environnements13. Personnalisation
des pages derreur14. La scurit15. Lutilisateur et les sessions16.
Gnration de CRUD17. Le cache18. Les tests19. Le dploiementSymfony2
est fortement personnalisable et propose diffrentes manires de
raliser un mme tche. On peut citer par exemple le format de
configuration qui peut tre le YAML, le XML, le PHP ou les
annotations, ainsi que la cration de template en PHP ou laide de
Twig. Par souci de simplicit, nous utiliserons le format YAML et
les annotations pour la configuration, et Twig pour les templates.
Le livre Symfony propose de nombreux exemples de lutilisation des
autres mthodes. Si dautres personnes souhaitent contribuer complter
des mthodes alternatives, nhsitez pas faire un fork du projet sur
Github puis proposer un pull :)
[Partie 1] - Configuration de Symfony2 et utilisation des
templatesJe propose galement des formations en petits groupes sur 2
3 jours, plus dinfos sur la page ddie. Nhsitez pas me contacter
(06.62.28.01.87 ou clement [@] keiruaprod.fr) pour en discuter
!IntroductionCe chapitre va couvrir les premires tapes de la
cration dun site web avec Symfony2. Nous allons tlcharger et
configurer la distribution standard de Symfony2, crer un bundle
pour le Blog et construire le template HTML principal. A la fin de
ce chapitre, vous aurez configur un site avec Symfony2 qui sera
disponible une adresse locale, par exemple http://symblog.dev/. Le
site web va contenir la structure HTML principale du blog, ainsi
que du contenu factice.Les thmes suivants vont tre abords au cours
de ce chapitre:1. Mise en place dune application Symfony22.
Configuration dun domaine de dveloppement3. Les Bundles Symfony24.
Les routes5. Les contrleurs6. Les templates avec TwigTlchargement
et installationComme tabli ci-dessus, nous allons utiliser la
distribution standard de Symfony2 (Symfony2 Standard Distribution).
Cette distribution est livre avec les librairies du moteur de
Symfony2, ainsi quavec les principaux bundles ncessaires au
dveloppement dun site web. Vous pouvez tlcharger larchive
correspondante sur le site de Symfony2. Comme je ne souhaite pas
rpter le contenu de lexcellente documentation propose dans le livre
sur Symfony2, vous pouvez consulter le chapitre Installation et
configuration de Symfony2 pour des besoins spcifiques. Cela vous
permettra de choisir quelle archive choisir, comment installer les
vendors requis, et enfin comment assigner les permissions aux
rpertoires qui le ncessitent.AttentionIl est important daccorder un
soin particulier la section Mise en place des permissions du
chapitre dinstallation. Cela dtaille les diverses manires daccorder
des permissions aux rpertoires app/cache et app/logs afin que les
utilisateurs du serveur web aient les droits daccs en
criture.Cration dun domaine de dveloppementPour ce tutorial, nous
allons utiliser le domaine local http://symblog.dev/, nanmoins vous
pouvez utiliser celui de votre choix. Ces instructions sont
spcifiques Apache et supposent quil est dj install et fonctionne
sur votre machine. Si vous tes dj laise avec la mise en place de
domaines locaux ou bien si vous utilisez un serveur web diffrent
tel que nginx vous pouvez sauter cette section.NoteCes tapes ont t
ralises sur la distribution Linux Fedora. Il est donc possible que
les chemins daccs puissent diffrer si vous utilisez un autre systme
dexploitation.Commenons par crer un hte virtuel avec Apache. Dans
le fichier de configuration dApache, ajoutez les paramtres suivants
en prenant bien soin de changer les chemins de DocumentRoot et
Directory correctement. Le chemin et le nom de votre fichier de
configuration Apache peut fortement varier selon votre systme
dexploitation. Avec Fedora, il est situ dans
/etc/httpd/conf/httpd.conf. Vous devrez diter ce fichier avec les
privilges sudo .# /etc/httpd/conf/httpd.conf
NameVirtualHost 127.0.0.1
ServerName symblog.dev DocumentRoot
"/var/www/html/symblog.dev/web" DirectoryIndex app.php
AllowOverride All Allow from All
Ensuite ajoutez un nouveau domaine la fin du fichier hte situ
dans /etc/hosts. A nouveau, vous devrez diter ce fichier avec les
privilges sudo .# /etc/hosts127.0.0.1 symblog.devFinalement,
noubliez pas de redmarrer le service Apache, afin de mettre jour
les paramtres de configuration avec les informations que nous
venons de spcifier.$ sudo service httpd restartTipSi vous passez
votre temps crer des domaines virtuels, vous pouvez simplifier ce
processus en utilisant des htes virtuels dynamiques.Vous devriez
dsormais pouvoir visiter lurl http://symblog.dev/app_dev.php/.
Sil sagit de votre premire visite sur la page daccueil de
Symfony2, prenez un peu de temps pour regarder les pages de
dmonstration. Sur chacune dentre elles vous pourrez trouver les
bouts de code utiliss sous le capot.NoteVous pouvez galement
remarquer une barre doutils au bas de lcran daccueil. Il sagit de
la barre doutils pour les dveloppeurs, qui fournit des informations
prcieuses sur ltat de lapplication. Parmi ces informations, vous
pourrez trouver le temps dexcution de la page, lutilisation mmoire,
les requtes effectues dans la base de donnes, ltat
dauthentification, et beaucoup plus. Par dfaut, la barre doutils
est seulement visible dans lenvironnement dev, car fournir la barre
doutils dans lenvironnement de production serait une grosse faille
de scurit: cel exposerait beaucoup dinformations sur le
fonctionnement interne de lapplication. Des rfrences cette barre
doutils seront faites au cours de ce tutoriel afin de vous
apprendre lutiliser.Configurer Symfony2 : linterface webSymfony2
propose une interface web pour configurer divers aspects du site
web tels que les paramtres de la base de donnes. Nous avons besoin
dune base de donnes pour ce projet, commenons par utiliser loutil
de configuration.Rendez-vous ladresse
http://symblog.dev/app_dev.php/ et cliquez sur le bouton Configure.
Entrez les dtails pour paramtrer lusage de votre base de donnes
avec Symfony2 (ce tutorial suppose lutilisation de MySQL, mais vous
pouvez choisir nimporte quelle base de donnes laquelle vous avez
accs). Sur la page suivante, poursuivez par la gnration dune cl
CSRF. Vous seront ensuite prsents les paramtres de Symfony2 que
lapplication a gnr pour vous. Attention la remarque figurant sur
cette page, il y a des chances que votre fichier app/paramaters.ini
ne soit pas accessible en criture et que vous deviez copier/coller
les paramtres dans ce fichier (Ces paramtres peuvent alors
remplacer ceux dj existants).Les bundles : Les briques lmentaires
de Symfony2les bundles sont les blocs de construction lmentaires de
nimporte quelle application Symfony2, en fait le framework Symfony2
est lui mme un bundle. Les bundles permettent de sparer le code en
briques fonctionnelles et rutilisables. Ils encapsulent le
fonctionnement des diverses composantes telles que les contrleurs,
le modle, les templates ainsi que les diverses ressources, aussi
bien images que CSS. Nous allons crer un bundle pour notre site web
dans lespace de nom (namespace) Blogger. Si vous ntes pas familier
avec les espaces de nom en PHP vous devriez passer un peu de temps
sur le sujet, car ils sont trs largement utiliss. Dans Symfony2,
toute portion de code se trouve lintrieur dun espace de nom.
Regardez le chargement automatique des classes Symfony2 pour
explorer en dtail le chargement automatique des classes dans
Symfony2.TipUne bonne comprhension des espaces de nom peut liminer
les problmes usuels auxquels vous pourriez faire face quand les
structures de rpertoires ne refltent pas correctement les
structures despaces de noms.Cration du bundle.Pour encapsuler les
fonctionnalits utilises par le blog, nous allons crer le bundle du
blog, qui va stocker tous les fichiers requis et pourrait alors tre
dpos directement dans nimporte quelle autre application Symfony2.
Symfony2 propose un large ventail de tches pour nous assister dans
la ralisation doprations courantes. Une de ces oprations courantes
est la cration dun bundle.Pour dmarrer le gnrateur de bundle,
utilisez la commande suivante. Des informations permettant de
configurer le bundle vous seront demandes. Slectionner chaque fois
la proposition par dfaut.$ php app/console generate:bundle
--namespace=Blogger/BlogBundle --format=ymlUne fois le travail du
gnrateur achev, Symfony2 aura agenc pour vous les divers lments de
base de la structure du bundle. Un certain nombre de changements
sont noter ici.TipVous ntes pas obliger dutiliser les gnrateurs que
Symfony2 propose, ils sont seulement l pour vous guider. Vous
auriez pu crer manuellement la structure de rpertoires et de
fichiers du bundle. Bien quil nest pas obligatoire dutiliser les
gnrateurs, ils ont pour avantage dtre rapide utiliser et ralisent
toutes les tches requises pour quun bundle puisse fonctionner, par
exemple lenregistrement du bundle.Lenregistrement du bundleNotre
nouveau bundle BloggerBlogBundle a t enregistr dans le noyau
(Kernel) situ dans app/AppKernel.php. Symfony2 a besoin que nous
enregistrions tous les bundles utiliss par lapplication. Bous
pourrez galement remarquer que certains bundles sont seulement
enregistrs dans les environnements dev ou test. Charger ces bundles
dans lenvironnement de production prod apporterait des calculs
supplmentaires pour des fonctionnalits qui ne seraient pas
ncessaires. Le code suivant montre comment notre BloggerBlogBundle
a t enregistr// app/AppKernel.phpclass AppKernel extends Kernel{
public function registerBundles() { $bundles = array( // .. new
Blogger\BlogBundle\BloggerBlogBundle(), ); // ..
return $bundles; }
// ..}Les routesLe routage du bundle a t import dans le
principal fichier de routage de lapplication, situ dans
app/config/routing.yml.# app/config/routing.ymlBloggerBlogBundle:
resource: "@BloggerBlogBundle/Resources/config/routing.yml" prefix:
/Loption prefix nous permet dassocier le routage entier du
BloggerBlogBundle avec un prfixe. Dans notre cas, nous avons opt
pour utiliser le chemin par dfaut, qui est /. Si par exemple vous
vouliez que toutes les routes soient prfixes par /blogger, vous
pouvez changer le prfixe pour prefix: /blogger.Structure par
dfautLarchitecture de rpertoire par dfaut du bundle a t cr dans le
rpertoirre src. Cela commence par le rpertoire Blogger qui est
associe lespace de nom Blogger dans lequel nous avons cre notre
bundle. Dans ce rpertoire se trouve le rpertoire BlogBundle qui
contient le bundle. Le contenu de ce dossier va tre dtaill mesure
que nous avancerons dans ce tutoriel. Si vous tes familier avec
larchitecture MVC, certain des noms de rpertoires doivent parler
deux mme.Le contrleur par dfautGrce au gnrateur de bundle, Symfony2
a cr pour nous un contrleur par dfaut. Nous pouvons utiliser ce
contrleur en allant ladresse
http://symblog.dev/app_dev.php/hello/symblog. Vous devriez voir une
page trs simple. Essayez de remplacer le symblog la fin de ladresse
par votre nom. Nous allons examiner comment cette page a t
gnre.RoutageLe fichier de routage du BloggerBlogBundle situ dans
src/Blogger/BlogBundle/Resources/config/routing.yml contient les
rgles de routage par dfaut#
src/Blogger/BlogBundle/Resources/config/routing.ymlBloggerBlogBundle_homepage:
pattern: /hello/{name} defaults: { _controller:
BloggerBlogBundle:Default:index }Le routage est compos dun motif et
de paramtres par dfaut. Le motif est compar lURL, les paramtres
dsignent quel contrleur excuter lorsque la route est ligible. Dans
le motif /hello/{name}, le substitut {name} va correspondre
nimporte quelle type de valeur car rien de spcifique na t prcis.
Cette route ne prcise galement aucune culture, format ou mthode
HTTP. Comme aucune mthode HTTP nest prcise, les requtes de type
GET, POST, PUT ou autre sont ligibiles lors de la comparaison du
motif.Si une adresse valide tous les critres prciss par une route,
alors elle sera excute par le contrleur dcrit dans loption
_controller. Cette option contient le nom logique du contrleur qui
permet Symfony2 de lassocier un fichier spcifique. Lexemple
ci-dessus va conduire lexcution de laction index du contrleur
Default situ dans le fichier
src/Blogger/BlogBundle/Controller/DefaultController.php.Le
contrleurLe contrleur dans cet exemple est trs simple. La
classe``DefaultController`` tend la classe Controller qui propose
des mthodes utiles telles que la mthode render utilise ci dessous.
Comme notre route dfinit un substitut, il est pass comme argument
notre action sous le nom $name. Laction ne fait rien de plus
quappeler la mthode render en lui prcisant dutiliser le fichier
template index.html.twig situ dans le dossier de vues (Views/) du
contrleur Default de BloggerBlogBundle pour laffichage. Le format
du nom de template est bundle:controlleur:template. Dans notre cas
il sagit de BloggerBlogBundle:Default:index.html.twig, qui associe
le template index.html.twig, dans le fichier de vues Default du
BloggerBlogBundle, ou physiquement au fichier
src/Blogger/BlogBundle/Resources/views/Default/index.html.twig. Un
tel format de nommage pour les template permet de rfrer des bundles
depuis nimporte o dans lapplication, ou mme dans un autre bundle.
Nous verrons cela plus tard dans le chapitre.Nous passons galement
la variable $name au template via le paramtre array fourni la
mthode render.