La version de symfony utilisé dans ce tutoriel est symfony 1.2.7, celle de php, 5.2.8 et pour appache, apache2.2.11 Vous êtes libre d’installer la version de votre choix, ça n’aura pas d’incidence sur la suite de ce tutoriel.
Pré-requis
- installer wamp
- installer pear (sera traité dans ce tutoriel)
- utiliser l’invite de commande Windows(démarrer>Exécuter…>cmd)
Profitez de ce manuel de formation en PDF pour comprendre mieux le Symfony2 et enrichir votre connaissance.
Commencez à télécharger ce cours adapté pour vous et à apprendre Symfony2.
Création de notre premier Bundle
Pour créer un bundle nous pouvons le faire à la main en créant l
es fichiers
et en les déclarant à Symfony, mais le plus simple et le plus rapide est
d'utiliser le générateur de Bundle pour cela nous utilisons la com
mande :
$ php app/console generate:bundle –namespace="ProgrammezSymfony
/RecetteBundle" –bundle-name="ProgrammezSymfonyRecetteBundle"
–dir="src" –format="annotation" –structure
On demande à Symfony de générer un bundle avec pour namespace P
ro-
grammezSymfony/RecetteBundle et pour nom ProgrammezSymfonyRe-
cetteBundle. Il crée ce bundle dans le répertoire « src » qui utilise le format
« annotation » et l'option structure, permet de générer l'intégralité
des
répertoires mêmes ceux qui sont vides. A la validation de la comma
nde
Symfony nous demande de confirmer la création du Bundle et de confir-
mer deux mises à jour, nous avons choisi yes dans tous les cas. Nous
avons donc tout le nécessaire pour démarrer le travail sur notre B
undle.
Remarque :le nom de votre bundle doit obligatoirement finir par Bundle
pour que Symfony le détecte.
En détail Symfony a fait les actions suivantes :
w Déclarer le bundle à Symfony en éditant le fichier app/appKernel.php et
en déclarant le nouveau Bundle dans la fonction registerBundles
w Indiquer à Symfony d'utiliser notre Bundle lorsque nous arrivons sur
la
page d'accueil du site en modifiant le app/config/routing.yml
Nous avons donc créé notre premier bundle que nous pouvons appeler
en
utilisant l'adresse (indiquée dans /src/ProgrammezSymfony/Recette-
Bundle/Controller/DefaultController.php)
http://www.programmez-
symfony.net/app_dev.php/hello/toto
Vous aurez alors une page affichant
simplement Hello Toto.
Création et affichage de notre modèle
de données avec les entités de Symfony
Pour gérer les données avec une base de données, Symfony s'appui
e sur
l'ORM Doctrine. C'est lui qui va s'occuper de créer la base, les tabl
es, et
de gérer l'insertion, la sélection, la suppression de données. Symfony utili-
se les entités. Nous allons donc utiliser la génération des ent
ités pour
créer notre première entité :
$ php app/console doctrine:generate:entity –entity="Programmez
SymfonyRecetteBundle:Recette" –fields="name:string(255)
tpspreparation:integer tpscuisson:integer ingredients:text
preparation:text"
Symfony vous pose une série de questions pour générer notre entité,
nous avons choisi de laisser les options par défaut.
Nous demandons donc à doctrine de générer une entité (doctr
ine:genera-
te:entity), le paramètre –entity permet de donner le nom du bundl
e, puis
après les deux points le nom de l'entité, et l'option –fields permet de défi-
nir nos champs avec un nom de champ et un type.
Si nous regardons dans le fichier /src/ProgrammezSymfoy/RecetteBund-
le/Entity/Recette.php, nous voyons les champs déclarés sous forme d'an-
notation comme par exemple le champs tpscuisson :
/**
* @var integer
*
* @ORMColumn(name="tpscuisson", type="integer")
*/
private $tpscuisson ;
Symfony a donc généré la déclaration des variables pour nous
ainsi que les getters et setters.
Pour générer notre base et les tables nous utilisons deux commandes
:
$ php
app/console doctrine:database:create
$ php app/console doctrine:schema:create
En cas de modification des champs ou d'ajout d'autres entités, vous p
ouvez
demander à doctrine la mise à jour de la BDD avec la commande suiv
ante :
$ php app/console doctrine:schema:update –force
Pour continuer, nous renseignons manuellement dans la base quelque
données, nous aurions pu aussi utiliser Fixtures, pour cela, je vous
laisse
aller voir la doc officielle :
http://symfony.com/fr/doc/current/bundles/DoctrineFixturesBundle/index.html
Affichage de nos recettes
Pour l'affichage de nos pages, Symfony utilise le moteur de template Twig.
Nous allons donc commencer par regarder comment est affichée notre
page Hello Toto. Le fichier appelé est dans /src/ProgrammezSymfony/
RecetteBundle/Resources/views/Default/index.html.twig
Ce fichier contient simplement :
Hello {{name}}
Nous allons ajouter un peu de HTML autour pour mettre en forme notre
affichage et rendre notre fichier index générique, pour que l'inté
gralité des
autres affichages hérite de l’index.
Puis on crée le fichier qui contiendra la liste de nos recettes /src/
Program-
mezSymfony/RecetteBundle/Resources/views/Default/recettes.html.twi
g qui contient0 le code suivant :
{% extends 'ProgrammezSymfonyRecetteBundle:Default:index.html.twig' %}
{% block contenu %}
{%for recette in Recettes %}
{% else %}
l'instant
{% endfor %}
{% endblock %}
Nous allons ensuite dire au contrôleur d'utiliser notre template index dans
/src/ProgrammezSymfony/RecetteBundle/Controller/DefaultController.p
hp nous remplaçons la ligne
@Route('/hello/{name}')
par
@Route('/')
Puis dans la fonction index située dans le même fichier, nous supprimons
la variable $name qui n'est plus utile. La fonction devient alors :
public function indexAction() {
return array() ;
}
Lorsque nous arrivons sur notre site nous avons alors une page vide qui
contient pourtant bien la structure HTML que nous avons créée.
Voyons maintenant comment récupérer les informations depuis la base
de
données pour permettre leur affichage. Nous allons utiliser les fonct
ions
php
46 Programmez! <Septembre 2014
038_055_177 19/08/14 21:50 Page46