Documentation officielle du framework PHP Symfony 3

Comment faire pour retourner un template sans utiliser un contrôleur personnalisé ?

Symfony

Traducteur

Guillaume SIGUI

Par défaut, les templates sont retournés par les contrôleurs. Et selon le rendu que vous voulez, vous personnalisez votre contrôleur. Cependant, il existe un moyen bien utile de rendre un template sans s'embarrasser d'un contrôleur. C'est ce que vous allez apprendre dans ce tutoriel.

Si vous avez des remarques concernant ce tutoriel, un espace de dialogue vous est proposé sur le forum. N'hésitez pas à apporter vos avis sur le lien ci-dessous.

Commentez

- Titre : Documentation officielle du framework PHP Symfony 3

- Auteur : Symfony

- Traducteur : Guillaume SIGUI

- Parution : 5 décembre 2016

- Public visé :

- Licence : Le contenu de cet article est rédigé par Symfony et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- I. Présentation générale

- II. Mise en cache de template statique

- Notes de la rédaction de Developpez.com

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.

Script YAML

1. acme_privacy:

2. path: /privacy

3. defaults:

4. _controller: FrameworkBundle:Template:template

5. template:    static/privacy.html.twig

Script XML

1. <?xml version="1.0" encoding="UTF-8" ?>

3. <routes xmlns="http://symfony.com/schema/routing"

4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

5. xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

7. <route id="acme_privacy" path="/privacy">

8. <default key="_controller">FrameworkBundle:Template:template</default>

9. <default key="template">static/privacy.html.twig</default>

10. </route>

11. </routes>

Script PHP

1. use Symfony\Component\Routing\RouteCollection;

2. use Symfony\Component\Routing\Route;

4. $collection = new RouteCollection();

5. $collection->add('acme_privacy', new Route('/privacy', array(

6. '_controller'  => 'FrameworkBundle:Template:template',

7. 'template'     => 'static/privacy.html.twig',

8. )));

10. 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 statique).

1. {{ render(url('acme_privacy')) }}

1. <?php

2. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

3. ?>

5. <!-- The url() method was introduced in Symfony 2.8. Prior to 2.8, you

6. had to use generate() with UrlGeneratorInterface::ABSOLUTE_URL

7. passed as the third argument. -->

8. <?php echo $view['actions']->render(

9. $view['router']->url('acme_privacy', array())

10. ) ?>

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.

1. acme_privacy:

2. path: /privacy

3. defaults:

4. _controller:  FrameworkBundle:Template:template

5. template:     'static/privacy.html.twig'

6. maxAge:       86400

7. sharedAge:    86400

1. <?xml version="1.0" encoding="UTF-8" ?>

3. <routes xmlns="http://symfony.com/schema/routing"

4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

5. xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

7. <route id="acme_privacy" path="/privacy">

8. <default key="_controller">FrameworkBundle:Template:template</default>

9. <default key="template">static/privacy.html.twig</default>

10. <default key="maxAge">86400</default>

11. <default key="sharedAge">86400</default>

12. </route>

13. </routes>

1. use Symfony\Component\Routing\RouteCollection;

2. use Symfony\Component\Routing\Route;

4. $collection = new RouteCollection();

5. $collection->add('acme_privacy', new Route('/privacy', array(

6. '_controller'  => 'FrameworkBundle:Template:template',

7. 'template'     => 'static/privacy.html.twig',

8. 'maxAge'       => 86400,

9. 'sharedAge' => 86400,

10. )));

11. 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