177 votes

Comment récupérer les paramètres de configuration dans les modèles Twig de Symfony2 ?

J'ai un modèle Symfony2 Twig. Je veux sortir la valeur d'un paramètre de configuration dans ce modèle Twig (un numéro de version). J'ai donc défini le paramètre de configuration comme suit :

parameters:
    app.version: 0.1.0

Je suis en mesure d'utiliser ce paramètre de configuration dans les contrôleurs, mais je n'ai aucune idée de la façon de l'obtenir dans mon modèle Twig.

416voto

Ryall Points 3428

Vous pouvez utiliser la substitution de paramètres dans le globaux de la branche de la configuration :

Paramètre config :

parameters:
    app.version: 0.1.0

Configuration de Twig :

twig:
    globals:
        version: '%app.version%'

Modèle de brindille :

{{ version }}

Cette méthode présente l'avantage de vous permettre d'utiliser le paramètre en ContainerAware également, en utilisant :

$container->getParameter('app.version');

0 votes

Bonne réponse. Addendum : depuis Symfony 3.1 une variable doit être citée : "%app.version%"

0 votes

@BigJ : Mis à jour pour inclure les guillemets, car cela fonctionnera aussi dans les anciennes versions.

2 votes

Cela devrait être la réponse acceptée. Merci !

191voto

webda2l Points 3057

Facilement, vous pouvez définir dans votre fichier de configuration :

twig:
    globals:
        version: "0.1.0"

Et accédez-y dans votre modèle avec

{{ version }}

Sinon, il doit y avoir un moyen avec une extension Twig d'exposer vos paramètres.

28 votes

Il est préférable de le définir dans les paramètres comme l'a expliqué @Ryall.

89voto

Francesco Casula Points 2508

Vous pouvez également tirer parti du système intégré de paramètres de service, qui vous permet d'isoler ou de réutiliser la valeur :

# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x

# app/config/config.yml
twig:
    globals:
        ga_tracking: "%ga_tracking%"

Maintenant, la variable ga_tracking est disponible dans tous les modèles Twig :

<p>The google tracking code is: {{ ga_tracking }}</p>

Le paramètre est également disponible à l'intérieur des contrôleurs :

$this->container->getParameter('ga_tracking');

Vous pouvez également définir un service comme une variable globale Twig (Symfony2.2+) :

# app/config/config.yml
twig:
    # ...
    globals:
        user_management: "@acme_user.user_management"

http://symfony.com/doc/current/templating/global_variables.html

Si la variable globale que vous voulez définir est plus compliquée, par exemple un objet, vous ne pourrez pas utiliser la méthode ci-dessus. À la place, vous devrez créer une extension Twig et renvoie la variable globale comme l'une des entrées de la méthode getGlobals.

5 votes

Cette solution semble être la meilleure car elle permet de conserver toutes les connaissances du système.

19voto

Alain Tiemblo Points 8884

Sur les versions plus récentes de Symfony2 (en utilisant un fichier parameters.yml au lieu de parameters.ini ), vous pouvez stocker des objets ou des tableaux au lieu de paires clé-valeur, ce qui vous permet de gérer vos globaux de cette manière :

config.yml (édité une seule fois) :

# app/config/config.yml
twig:
  globals:
    project: %project%

paramètres.yml :

# app/config/parameters.yml
project:
  name:       myproject.com
  version:    1.1.42

Et ensuite, dans un fichier twig, vous pouvez utiliser {{ project.version }} o {{ project.name }} .

Note : Personnellement, je n'aime pas ajouter des choses à app juste parce que c'est la variable de Symfony et je ne sais pas ce qui sera stocké là dans le futur.

16voto

Sudhakar K Points 176

Les réponses données ci-dessus sont correctes et fonctionnent bien. Je l'ai utilisé d'une manière différente.

config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: app.yml }
    - { resource: app_twig.yml }

app.yml

parameters:
  app.version:           1.0.1

app_twig.yml

twig:
  globals:
    version: %app.version%

Contrôleur interne :

$application_version = $this->container->getParameter('app.version');
// Here using app.yml

Dans le fichier template/twig :

Project version {{ version }}!
{#  Here using app_twig.yml content.  #}
{#  Because in controller we used $application_version  #}

Pour utiliser la sortie du contrôleur :

Contrôleur :

public function indexAction() {
        $application_version = $this->container->getParameter('app.version');
        return array('app_version' => $application_version);
    }

fichier modèle/twig :

Project version {{ app_version }}

J'ai mentionné la différence pour mieux comprendre.

1 votes

Oui, c'est bien, cette réponse explique très bien les deux façons de faire : passer par le contrôleur et passer comme une variable twig globale ! +1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X