IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Documentation officielle du framework PHP Symfony 3

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

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.

2 commentaires Donner une note à l´article (5)

Article lu   fois.

Les deux auteur et traducteur

Traducteur : Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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
Sélectionnez
1.
2.
3.
4.
5.
acme_privacy:
    path: /privacy
    defaults:
        _controller: FrameworkBundle:Template:template
        template:    static/privacy.html.twig
Script XML
Sélectionnez
1.
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>
Script PHP
Sélectionnez
1.
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).

 
Sélectionnez
1.
{{ render(url('acme_privacy')) }}
 
Sélectionnez
1.
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.

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
acme_privacy:
    path: /privacy
    defaults:
        _controller:  FrameworkBundle:Template:template
        template:     'static/privacy.html.twig'
        maxAge:       86400
        sharedAge:    86400
 
Sélectionnez
1.
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>
 
Sélectionnez
1.
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Licence Creative Commons
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 © 2016 Developpez.com.