I. Présentation générale▲
En général, quand vous avez besoin de créer une page, vous devez créer un contrôleur et rendre un template à partir de ce contrôleur. Mais si vous êtes en train de rendre un simple template qui n'a pas besoin de recevoir des données en entrée (passage de variable), vous pouvez éviter de créer un contrôleur entièrement, en utilisant le contrôleur intégré : FrameworkBundle:Template:template.
Par exemple, supposons que vous voulez retourner un template static/privacy.html.twig, qui ne requiert pas qu'on lui passe des variables. Vous pouvez le faire sans créer un contrôleur.
2.
3.
4.
5.
acme_privacy
:
path
:
/privacy
defaults
:
_controller
:
FrameworkBundle
:
Template
:
template
template
:
static/privacy.html.twig
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8" ?>
<routes
xmlns
=
"http://symfony.com/schema/routing"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"
>
<route
id
=
"acme_privacy"
path
=
"/privacy"
>
<default
key
=
"_controller"
>
FrameworkBundle:Template:template</default>
<default
key
=
"template"
>
static/privacy.html.twig</default>
</route>
</routes>
2.
3.
4.
5.
6.
7.
8.
9.
10.
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
'
=>
'
static/privacy.html.twig
'
,
)));
return $collection
;
Le contrôleur FrameworkBundle:Template:template va simplement rendre tout template que vous avez passé, comme valeur par défaut de template.
Vous pouvez, bien entendu, également utiliser cette astuce lors du rendu des contrôleurs intégrés à partir d'un template. Mais puisque le but de rendre un template est généralement de préparer certaines données dans un contrôleur personnalisé, ce n'est probablement utile que si vous souhaitez mettre en cache cette page partielle (Voir Mise en cache de template statiqueMise en cache de template statique).
{{
render(
url(
'acme_privacy'
))
}}
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
use
Symfony\Component\Routing\Generator\UrlGeneratorInterface;
?>
<!--
The url() method was introduced in Symfony 2.8
.
Prior to 2.8
,
you
had to use generate() with UrlGeneratorInterface::
ABSOLUTE_URL
passed as the third argument.
-->
<?php
echo $view
[
'actions'
]->
render(
$view
[
'router'
]->
url('acme_privacy'
,
array
())
) ?>
II. Mise en cache de template statique▲
Étant donné que les templates qui sont rendus de cette manière sont généralement statiques, ça peut avoir du sens de les mettre en cache. Heureusement, c'est facile ! En configurant quelques variables supplémentaires dans votre route, vous pouvez contrôler exactement comment votre page est mise en cache.
2.
3.
4.
5.
6.
7.
acme_privacy
:
path
:
/privacy
defaults
:
_controller
:
FrameworkBundle
:
Template
:
template
template
:
'static/privacy.html.twig'
maxAge
:
86400
sharedAge
:
86400
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8" ?>
<routes
xmlns
=
"http://symfony.com/schema/routing"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi
:
schemaLocation
=
"http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"
>
<route
id
=
"acme_privacy"
path
=
"/privacy"
>
<default
key
=
"_controller"
>
FrameworkBundle:Template:template</default>
<default
key
=
"template"
>
static/privacy.html.twig</default>
<default
key
=
"maxAge"
>
86400</default>
<default
key
=
"sharedAge"
>
86400</default>
</route>
</routes>
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
'
=>
'
static/privacy.html.twig
'
,
'
maxAge
'
=>
86400
,
'
sharedAge
'
=>
86400
,
)));
return $collection
;
Les valeurs maxAge et sharedAge sont utilisées pour modifier l'objet « Response » créé dans le contrôleur. Pour plus d'informations sur la mise en cache, consultez HTTP Cache.
Il y a aussi une variable privée (qui n'est pas présentée ici). Par défaut, l'objet « Response » devra être public, aussi longtemps que les valeurs maxAge et sharedAge sont passées. Si cette variable est à true, l'objet « Response » sera marqué comme privé.
Notes de la rédaction de Developpez.com▲
Nous remercions SensioLabs pour la mise à disposition de ce tutoriel, Guillaume Sigui pour la traduction de ce tutoriel et F-leb pour la relecture orthographique