Skip to content

Commit cb075e0

Browse files
committed
Merge pull request #350 from waldo2188/master
Translate Cookbook: render without controller
2 parents cde5916 + 3775219 commit cb075e0

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
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

Comments
 (0)