169
Création d’un blog avec Symfony2 Introduction Ce tutoriel va vous guider dans le processus de création d’un blog complet avec Symfony2 . La distribution standard du framework sera utilisée, qui inclut les principaux composants nécessaires à la création de vos propres sites web. Le tutoriel est découpé en plusieurs parties, qui couvrent chacune des aspects différents de Symfony2 et de ses composants. Il est prévu pour être utilisé de la même manière 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 d’emails. [Partie 3] - Le modèle d’article : utilisation de Doctrine 2 et des données factices [Partie 4] - Le modèle de commentaires : ajouter des commentaires, dépôts Doctrine 2 et migrations. [Partie 5] - Personnalisation de la vue : extensions Twig, barre latérale et Assetic [Partie 6] - Les tests unitaires et fonctionnels avec PHPUnit Contenu Le but de ce tutoriel est de couvrir les tâches que vous allez régulièrement être amené à réaliser lors de la création d’un site web avec Symfony2. 1. Les bundles 2. Les contrôleurs 3. Les Template (avec Twig) 4. Le modèle - Doctrine 2 5. Les migrations

Création Un Blog Avec Symfony2

Embed Size (px)

DESCRIPTION

Création Un Blog Avec Symfony2

Citation preview

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.