From 37752193c04e7c42e7889019a0b213e06e7c55eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Val=C3=A9rian=20Girard?= Date: Fri, 8 Nov 2013 09:01:15 +0100 Subject: [PATCH] Translate Cookbnook: render without controller --- .../templating/render_without_controller.rst | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 cookbook/templating/render_without_controller.rst diff --git a/cookbook/templating/render_without_controller.rst b/cookbook/templating/render_without_controller.rst new file mode 100644 index 000000000..c7d808465 --- /dev/null +++ b/cookbook/templating/render_without_controller.rst @@ -0,0 +1,140 @@ +.. index:: + single: Templating; Rendre un template sans créer de contrôleur + +Comment rendre un template sans passer par un contrôleur +======================================================== + +Normalement, quand vous avez besoin de créer une page, vous devez créer +un contrôleur et rendre un template depuis ce contrôleur. Mais si vous +avez besoin d'afficher un simple template, qui ne nécessite pas de passage +de paramètre, vous pouvez vous passer complètement de la création d'un +contrôleur, en utilisant le contrôleur intégré ``FrameworkBundle:Template:template``. + +Par exemple, supposons que vous vouliez afficher un template +``AcmeBundle:Static:privacy.html.twig``, qui ne nécessite aucun passage de variable. +Vous pouvez le faire sans créer de contrôleur. + +.. configuration-block:: + + .. code-block:: yaml + + acme_privacy: + path: /privacy + defaults: + _controller: FrameworkBundle:Template:template + template: 'AcmeBundle:Static:privacy.html.twig' + + .. code-block:: xml + + + + + + + FrameworkBundle:Template:template + AcmeBundle:Static:privacy.html.twig + + + + .. code-block:: php + + use Symfony\Component\Routing\RouteCollection; + use Symfony\Component\Routing\Route; + + $collection = new RouteCollection(); + $collection->add('acme_privacy', new Route('/privacy', array( + '_controller' => 'FrameworkBundle:Template:template', + 'template' => 'AcmeBundle:Static:privacy.html.twig', + ))); + + return $collection; + +Le contrôleur ``FrameworkBundle:Template:template`` va simplement afficher le template +que vous aurez définit comme paramètre ``template``. + +Vous pouvez aussi, bien sûr, utiliser cette astuce lors du rendu de contrôleurs +imbriqués dans un template. Le but de rendre un controleur depuis un template est +typiquement de préparer des données pour un contrôleur personalisé. C'est probablement +utile, uniquement, si vous voulez mettre partiellement en cache cette page (voir +:ref:`cookbook-templating-no-controller-caching`). + +.. configuration-block:: + + .. code-block:: html+jinja + + {{ render(url('acme_privacy')) }} + + .. code-block:: html+php + + render( + $view['router']->generate('acme_privacy', array(), true) + ) ?> + +.. _cookbook-templating-no-controller-caching: + +Mettre en cache les templates statiques +--------------------------------------- + +.. versionadded:: 2.2 + La possibilité de mettre en cache les templates rendu par ``FrameworkBundle:Template:template`` + est nouvelle en Symfony 2.2. + +Puisque les templates affichés par cette méthode sont souvent statiques, il +pourrait être judicieux de les mettre en cache. Par chance, c'est facile! +En configurant quelques variables dans votre route, vous pourrez finement contrôler +la façon dont vos pages sont mise en cache: + +.. configuration-block:: + + .. code-block:: yaml + + acme_privacy: + path: /privacy + defaults: + _controller: FrameworkBundle:Template:template + template: 'AcmeBundle:Static:privacy.html.twig' + maxAge: 86400 + sharedMaxAge: 86400 + + .. code-block:: xml + + + + + + + FrameworkBundle:Template:template + AcmeBundle:Static:privacy.html.twig + 86400 + 86400 + + + + .. code-block:: php + + use Symfony\Component\Routing\RouteCollection; + use Symfony\Component\Routing\Route; + + $collection = new RouteCollection(); + $collection->add('acme_privacy', new Route('/privacy', array( + '_controller' => 'FrameworkBundle:Template:template', + 'template' => 'AcmeBundle:Static:privacy.html.twig', + 'maxAge' => 86400, + 'sharedMaxAge' => 86400, + ))); + + return $collection; + +Les valeurs de ``maxAge`` et ``sharedMaxAge`` sont utilisées pour modifier +l'objet Response créé dans le contrôleur. Pour plus d'informations sur la mise +en cache, voir :doc:`/book/http_cache`. + +Il existe également un paramètre ``private`` (non présenté ici). Par défaut, la réponse +est faite de manière public (la réponse peut être mise en cache, à la fois par les +caches privés et les caches publics) tant que les paramètres ``maxAge`` ou ``sharedMaxAge`` +sont renseignés. Si elle est définie à ``true`` la réponse devient privé (la réponse +concerne un unique utilisateur et ne doit pas être stockée dans les caches publics).