Nous travaillons dans notre
bundle SdzBlogBundle, placez vous donc dans son répertoire :
src/Sdz/BlogBundle.
Pour créer une page, il faut d'abord définir l'URL à laquelle elle sera accessible. Pour cela, il faut créer la route de cette page.
Le routeur (ou « router ») ? Une route ?
Objectif
L'objectif du routeur est de dire à Symfony2 ce qu'il doit faire lorsque que l'on appelle l'
URL /hello-world (par exemple). Nous devons donc créer une route qui va dire :
« lorsque l'on est sur l'URL /hello-world, alors on appelle le contrôleur « Blog » qui va afficher un Hello World. ».
Voici un schéma de l'interaction Noyau - Routeur - Route :
Comme je l'ai dit, nous ne toucherons ni au noyau, ni au routeur : nous nous occuperons juste des routes. Ouf, voilà du travail en moins.
1. Créons notre fichier de routes
Les routes se définissent dans un simple fichier texte, que Symfony2 a déjà généré. Usuellement, on nomme ce fichier
Resources/config/routing.yml dans le répertoire du
bundle. Ouvrez le fichier, et rajoutez cette route à la suite de celle qui existe déjà :
Code : Autre1
2
3
| HelloTheWorld:
pattern: /hello-world
defaults: { _controller: SdzBlogBundle:Blog:index } |
Vous venez de créer votre première route !
Contrairement à ce que vous pourriez penser, l'indentation se fait avec 4 espaces par niveau,
pas avec des tabulations ! Je le précise en grand ici parce qu'un jour vous ferez l'erreur (l'inévitable ne peut être évité), et vous me remercierez de vous avoir mis sur la voie

Et ceci est valable pour tous vos fichiers
.yml
Attention également, il semble y avoir des erreurs lors des copier-coller depuis le tutoriel vers les fichiers .yml. Si vous rencontrez une erreur, pensez à bien définir l'encodage du fichier en "UTF-8 sans BOM" et à supprimer les éventuels caractères non désirés. C'est un bogue étrange qui provient du site, mais dont on ne connait pas l'origine.
Essayons de comprendre rapidement ce fichier :
- Le "HelloTheWorld" est le nom de la route. Il est assez arbitraire, et vous permet juste de vous y retrouver par la suite ;
- Le "pattern" correspond à l'URL à laquelle nous souhaitons que notre hello world soit accessible. C'est ce qui permet à la route de dire : « cette URL est pour moi, je prends » ;
- Le "_controller" correspond à l'action que l'on veut exécuter et au contrôleur que l'on va appeler (un contrôleur peut contenir plusieurs actions, c'est à dire plusieurs pages).
Ne vous inquiétez pas, un chapitre complet est dédié au routeur et vous permettra de jouer avec. Pour l'instant ce fichier nous permet juste d'avancer.
Mais avant d'aller plus loin, penchons-nous sur la valeur que l'on a donnée à
_controller : «
SdzBlogBundle:Blog:index ». Cette valeur se découpe en suivant
les pointillés les deux-points (« : ») :
- « SdzBlogBundle » est le nom de notre bundle, celui dans lequel Symfony2 ira chercher le contrôleur ;
- « Blog » est le nom du contrôleur à ouvrir. En terme de fichier, cela correspond à controller/BlogController.php dans le répertoire du bundle. Dans notre cas, nous avons src/Sdz/BlogBundle/controller/BlogController.php comme chemin absolu.
- « index » est le nom de la méthode à exécuter au sein du contrôleur.
2. Informons Symfony2 que nous avons des routes pour lui
On l'a vu précédemment, grâce au bon travail du générateur, Symfony2 est déjà au courant du fichier de routes de notre bundle. Mais sachez que ce n'est pas par magie !
Il faut que vous sachiez comment tout cela s'imbrique. Ouvrez le fichier de configuration globale de notre application :
app/config/config.yml. Dans ce fichier, il y a plein de valeurs, mais la ligne qui nous intéresse pour le routeur est la ligne 10 :
Code : Autre1
| router: { resource: "%kernel.root_dir%/config/routing.yml" } |
Cette ligne indique au routeur qu'il doit chercher les routes dans le fichier
app/config/routing.yml (
%kernel.root_dir% est un paramètre qui vaut "app" dans notre cas). Le routeur va donc se contenter d'ouvrir ce fichier. Ouvrez-le également. Outre les commentaires, vous voyez que le générateur a inséré une route spéciale qui va importer le fichier de route de notre
bundle.
Bref, vous n'avez rien à modifier ici, c'était juste pour que vous sachiez que l'import du fichier de routes d'un bundle n'est pas automatique, il se définit dans le fichier de routes global.
Revenons à nos moutons. En fait, on aurait pu ajouter notre route directement dans ce fichier
routing.yml. Cela aurait fonctionné et cela aurait été plutôt rapide. Mais c'est oublier notre découpage en
bundles ! En effet, cette route concerne le
bundle du blog, elle doit donc se trouver dans notre
bundle et pas ailleurs. N'oubliez jamais ce principe.
Cela permet à notre
bundle d'être indépendant : si plus tard nous ajoutons, modifions ou supprimons des routes dans notre
bundle, nous ne toucherons qu'au fichier
src/Sdz/BlogBundle/Resources/config/routing.yml au lieu de
app/config/routing.yml.
Et voilà, il n'y a plus qu'à créer le fameux contrôleur
Blog ainsi que sa méthode
index !