|
| 1 | +.. index:: |
| 2 | + single: Templating; Rendre un template sans créer de contrôleur |
| 3 | + |
| 4 | +Comment rendre un template sans passer par un contrôleur |
| 5 | +======================================================== |
| 6 | + |
| 7 | +Normalement, quand vous avez besoin de créer une page, vous devez créer |
| 8 | +un contrôleur et rendre un template depuis ce contrôleur. Mais si vous |
| 9 | +avez besoin d'afficher un simple template, qui ne nécessite pas de passage |
| 10 | +de paramètre, vous pouvez vous passer complètement de la création d'un |
| 11 | +contrôleur, en utilisant le contrôleur intégré ``FrameworkBundle:Template:template``. |
| 12 | + |
| 13 | +Par exemple, supposons que vous vouliez afficher un template |
| 14 | +``AcmeBundle:Static:privacy.html.twig``, qui ne nécessite aucun passage de variable. |
| 15 | +Vous pouvez le faire sans créer de contrôleur. |
| 16 | + |
| 17 | +.. configuration-block:: |
| 18 | + |
| 19 | + .. code-block:: yaml |
| 20 | +
|
| 21 | + acme_privacy: |
| 22 | + path: /privacy |
| 23 | + defaults: |
| 24 | + _controller: FrameworkBundle:Template:template |
| 25 | + template: 'AcmeBundle:Static:privacy.html.twig' |
| 26 | +
|
| 27 | + .. code-block:: xml |
| 28 | +
|
| 29 | + <?xml version="1.0" encoding="UTF-8" ?> |
| 30 | +
|
| 31 | + <routes xmlns="http://symfony.com/schema/routing" |
| 32 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 33 | + xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> |
| 34 | +
|
| 35 | + <route id="acme_privacy" path="/privacy"> |
| 36 | + <default key="_controller">FrameworkBundle:Template:template</default> |
| 37 | + <default key="template">AcmeBundle:Static:privacy.html.twig</default> |
| 38 | + </route> |
| 39 | + </routes> |
| 40 | +
|
| 41 | + .. code-block:: php |
| 42 | +
|
| 43 | + use Symfony\Component\Routing\RouteCollection; |
| 44 | + use Symfony\Component\Routing\Route; |
| 45 | +
|
| 46 | + $collection = new RouteCollection(); |
| 47 | + $collection->add('acme_privacy', new Route('/privacy', array( |
| 48 | + '_controller' => 'FrameworkBundle:Template:template', |
| 49 | + 'template' => 'AcmeBundle:Static:privacy.html.twig', |
| 50 | + ))); |
| 51 | +
|
| 52 | + return $collection; |
| 53 | +
|
| 54 | +Le contrôleur ``FrameworkBundle:Template:template`` va simplement afficher le template |
| 55 | +que vous aurez définit comme paramètre ``template``. |
| 56 | + |
| 57 | +Vous pouvez aussi, bien sûr, utiliser cette astuce lors du rendu de contrôleurs |
| 58 | +imbriqués dans un template. Le but de rendre un controleur depuis un template est |
| 59 | +typiquement de préparer des données pour un contrôleur personalisé. C'est probablement |
| 60 | +utile, uniquement, si vous voulez mettre partiellement en cache cette page (voir |
| 61 | +:ref:`cookbook-templating-no-controller-caching`). |
| 62 | + |
| 63 | +.. configuration-block:: |
| 64 | + |
| 65 | + .. code-block:: html+jinja |
| 66 | + |
| 67 | + {{ render(url('acme_privacy')) }} |
| 68 | + |
| 69 | + .. code-block:: html+php |
| 70 | + |
| 71 | + <?php echo $view['actions']->render( |
| 72 | + $view['router']->generate('acme_privacy', array(), true) |
| 73 | + ) ?> |
| 74 | + |
| 75 | +.. _cookbook-templating-no-controller-caching: |
| 76 | + |
| 77 | +Mettre en cache les templates statiques |
| 78 | +--------------------------------------- |
| 79 | + |
| 80 | +.. versionadded:: 2.2 |
| 81 | + La possibilité de mettre en cache les templates rendu par ``FrameworkBundle:Template:template`` |
| 82 | + est nouvelle en Symfony 2.2. |
| 83 | + |
| 84 | +Puisque les templates affichés par cette méthode sont souvent statiques, il |
| 85 | +pourrait être judicieux de les mettre en cache. Par chance, c'est facile! |
| 86 | +En configurant quelques variables dans votre route, vous pourrez finement contrôler |
| 87 | +la façon dont vos pages sont mise en cache: |
| 88 | + |
| 89 | +.. configuration-block:: |
| 90 | + |
| 91 | + .. code-block:: yaml |
| 92 | +
|
| 93 | + acme_privacy: |
| 94 | + path: /privacy |
| 95 | + defaults: |
| 96 | + _controller: FrameworkBundle:Template:template |
| 97 | + template: 'AcmeBundle:Static:privacy.html.twig' |
| 98 | + maxAge: 86400 |
| 99 | + sharedMaxAge: 86400 |
| 100 | +
|
| 101 | + .. code-block:: xml |
| 102 | +
|
| 103 | + <?xml version="1.0" encoding="UTF-8" ?> |
| 104 | +
|
| 105 | + <routes xmlns="http://symfony.com/schema/routing" |
| 106 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 107 | + xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> |
| 108 | +
|
| 109 | + <route id="acme_privacy" path="/privacy"> |
| 110 | + <default key="_controller">FrameworkBundle:Template:template</default> |
| 111 | + <default key="template">AcmeBundle:Static:privacy.html.twig</default> |
| 112 | + <default key="maxAge">86400</default> |
| 113 | + <default key="sharedMaxAge">86400</default> |
| 114 | + </route> |
| 115 | + </routes> |
| 116 | +
|
| 117 | + .. code-block:: php |
| 118 | +
|
| 119 | + use Symfony\Component\Routing\RouteCollection; |
| 120 | + use Symfony\Component\Routing\Route; |
| 121 | +
|
| 122 | + $collection = new RouteCollection(); |
| 123 | + $collection->add('acme_privacy', new Route('/privacy', array( |
| 124 | + '_controller' => 'FrameworkBundle:Template:template', |
| 125 | + 'template' => 'AcmeBundle:Static:privacy.html.twig', |
| 126 | + 'maxAge' => 86400, |
| 127 | + 'sharedMaxAge' => 86400, |
| 128 | + ))); |
| 129 | +
|
| 130 | + return $collection; |
| 131 | +
|
| 132 | +Les valeurs de ``maxAge`` et ``sharedMaxAge`` sont utilisées pour modifier |
| 133 | +l'objet Response créé dans le contrôleur. Pour plus d'informations sur la mise |
| 134 | +en cache, voir :doc:`/book/http_cache</book/http_cache>`. |
| 135 | + |
| 136 | +Il existe également un paramètre ``private`` (non présenté ici). Par défaut, la réponse |
| 137 | +est faite de manière public (la réponse peut être mise en cache, à la fois par les |
| 138 | +caches privés et les caches publics) tant que les paramètres ``maxAge`` ou ``sharedMaxAge`` |
| 139 | +sont renseignés. Si elle est définie à ``true`` la réponse devient privé (la réponse |
| 140 | +concerne un unique utilisateur et ne doit pas être stockée dans les caches publics). |
0 commit comments