La route
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.
# src/OC/PlatformBundle/Resources/config/routing.yml
hello_the_world:
path: /hello-world
defaults: { _controller: OCPlatformBundle:Advert:index }
hello_the_world:
path: /hello-world
defaults: { _controller: OCPlatformBundle:Advert:index }
hello_the_world
est le nom de la route. Il est assez arbitraire, et vous permet juste de vous y retrouver par la suite. La seule contrainte est qu'il soit unique.path
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. »defaults
correspond aux paramètres de la route, dont :_controller
, qui correspond à l'action (ici, « index ») que l'on veut exécuter et au contrôleur (ici, « Advert ») que l'on va appeler (un contrôleur peut contenir plusieurs actions, c'est-à-dire plusieurs pages).- « OCPlatformBundle » est le nom de notre bundle, celui dans lequel Symfony2 ira chercher le contrôleur.
- « Advert » est le nom du contrôleur à ouvrir. En terme de fichier, cela correspond à
Controller/AdvertController.php
dans le répertoire du bundle. Dans notre cas, nous avonssrc/OC/PlatformBundle/Controller/AdvertController.php
comme chemin absolu. - « index » est le nom de la méthode à exécuter au sein du contrôleur.
Créons notre contrôleur
On doit donc créer le fichier src/OC/PlatformBundle/Controller/AdvertController.php.
<?php
// src/OC/PlatformBundle/Controller/AdvertController.php
namespace OC\PlatformBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class AdvertController
{
public function indexAction()
{
return new Response("Hello World !");
}
}
// src/OC/PlatformBundle/Controller/AdvertController.php
namespace OC\PlatformBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class AdvertController
{
public function indexAction()
{
return new Response("Hello World !");
}
}
Maintenant, essayons de comprendre rapidement ce fichier :
- Ligne 5 : on se place dans le namespace des contrôleurs de notre bundle. Rien de bien compliqué, suivez la structure des répertoires dans lequel se trouve le contrôleur.
- Ligne 7 : notre contrôleur va utiliser l'objet
Response
, il faut donc le définir grâce auuse
. - Ligne 9 : le nom de notre contrôleur respecte le nom du fichier pour que l'autoload fonctionne.
- Ligne 11 : on définit la méthode
indexAction()
. N'oubliez pas de mettre le suffixeAction
derrière le nom de la méthode. - Ligne 13 : on crée une réponse toute simple. L'argument de l'objet
Response
est le contenu de la page que vous envoyez au visiteur, ici « Hello World ! ». Puis on retourne cet objet.Les templates avec Twig
Créons notre propre répertoire
Advert
et créons notre templateindex.html.twig
{# src/OC/PlatformBundle/Resources/views/Advert/index.html.twig #}
<!DOCTYPE html>
<html>
<head>
<title>Bienvenue sur ma première page avec OpenClassrooms !</title>
</head>
<body>
<h1>Hello World !</h1>
<p>
Le Hello World est un grand classique en programmation.
Il signifie énormément, car cela veut dire que vous avez
réussi à exécuter le programme pour accomplir une tâche simple :
afficher ce hello world !
</p>
</body>
</html>Ensuite, la méthode concrête que nous utilisons pour récupérer le contenu d'un template est la méthode$this->get('templating')->render()
. Cette méthode prend en paramètre le nom du template et retourne le contenu du template. Voici le contrôleur modifié en conséquence :<?php
// src/OC/PlatformBundle/Controller/AdvertController.php
namespace OC\PlatformBundle\Controller;
// N'oubliez pas ce use :
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class AdvertController extends Controller
{
public function indexAction()
{
$content = $this->get('templating')->render('OCPlatformBundle:Advert:index.html.twig');
return new Response($content);
}
}Vous voulez vous amuser un peu avec les variables Twig ? Modifiez le contrôleur pour rajouter un deuxième argument à la méthoderender()
, un tableau contenant le nom des variables (ici, "nom") et leur valeur (ici, "younes") :<?php
$content = $this
->get('templating')
->render('OCPlatformBundle:Advert:index.html.twig', array(
'nom' => 'winzou'
)
);Puis, modifiez votre template en remplaçant la balise<h1>
par la suivante :<h1>Hello {{ nom }} !</h1>Un peu de nettoyage
Avec tous les éléments générés par Symfony2 et les nôtres, il y a un peu de redondance. Vous pouvez donc supprimer joyeusement : - Le contrôleur
Controller/DefaultController.php
; - Les vues dans le répertoire
Resources/views/Default
; - La route
oc_platform_homepage
dansResources/config/routing.yml
.
Ainsi
que tout ce qui concerne le bundle AcmeDemoBundle, un bundle de
démonstration intégré dans la distribution standard de Symfony2 et dont
nous ne nous servirons pas. Supprimez donc :
- Le répertoire
src/Acme
; - La ligne 24 du fichier
app/AppKernel.php
, celle qui active le bundle AcmeDemoBundle ($bundles[] = new Acme\DemoBundle\AcmeDemoBundle()
) ; - Les lignes 16 à 18 du le fichier
app/config/routing_dev.yml,
celles qui importent le fichier de route du bundle Acme (_acme_demo: resource: "@AcmeDemoBundle/Resources/config/routing.yml"
)Le cache
- En mode « prod », c'est simple, Symfony2 ne regénère jamais le cache. Cela lui permet de ne faire aucune vérification sur la validité du cache (ce qui prend du temps), et de servir les pages très rapidement à vos visiteurs. La solution : vider le cache à la main à chaque fois que vous faites des changements. Cela se fait grâce à la commande
php app/console cache:clear --env=prod
. - En mode « dev », c'est plus simple. Lorsque vous modifiez votre code, Symfony reconstruit une bonne partie du cache à la prochaine page que vous chargez. Donc pas forcément besoin de vider le cache. Seulement, comme il ne reconstruit pas tout, il peut parfois apparaître des bugs un peu étrange. Dans ce cas, un petit
php app/console cache:clear
résout le problème en trois secondes !
Commentaires
Enregistrer un commentaire