web-dev-qa-db-fra.com

Comment obtenir les paramètres de configuration dans Symfony2 Twig Templates

J'ai un modèle Symfony2 Twig. Je souhaite afficher 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 config comme ceci:

parameters:
    app.version: 0.1.0

Je peux utiliser ce paramètre de configuration dans les contrôleurs, mais je ne sais pas comment l'obtenir dans mon modèle Twig.

159
Timo

Vous pouvez facilement définir dans votre fichier de configuration:

twig:
    globals:
        version: "0.1.0"

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

{{ version }}

Sinon, vous devez utiliser une extension Twig pour exposer vos paramètres.

185
webda2l

Vous pouvez utiliser la substitution de paramètres dans la section twig globals de la configuration:

Paramètre config:

parameters:
    app.version: 0.1.0

Config Twig:

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

Modèle de brindille:

{{ version }}

Cette méthode offre l’avantage de vous permettre d’utiliser le paramètre dans les classes ContainerAware, en utilisant:

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

Vous pouvez également tirer parti du système de paramètres de service intégré, 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 dans les contrôleurs:

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

Vous pouvez également définir un service en tant que 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 souhaitez définir est plus compliquée, par exemple un objet, vous ne pourrez pas utiliser la méthode ci-dessus. Au lieu de cela, vous devrez créer une extension Twig et renvoyer la variable globale comme l'une des entrées de la méthode getGlobals.

86
Francesco Casula

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

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

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

parameters.yml:

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

Ensuite, dans un fichier twig, vous pouvez utiliser {{ project.version }} ou {{ project.name }}.

Note: Personnellement, je n'aime pas ajouter des éléments à app, simplement parce que c'est la variable de Symfony et que je ne sais pas ce qui y sera stocké à l'avenir.

19
Alain Tiemblo

Les données ci-dessus sont correctes et fonctionnent bien. J'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 intérieur:

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

À l'intérieur du modèle/fichier 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);
    }

template/twig file:

Project version {{ app_version }}

J'ai mentionné le différent pour mieux comprendre.

16
Sudhakar Krishnan

Avec une extension Twig, vous pouvez créer une fonction parameterTwig:

{{ parameter('jira_Host') }}

TwigExtension.php:

class TwigExtension extends \Twig_Extension
{
    public $container;

    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('parameter', function($name)
            {
                return $this->container->getParameter($name);
            })
        ];
    }


    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'iz';
    }
}

service.yml:

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }
12
Thomas Decaux

Vous pouvez simplement lier $this->getParameter('app.version') dans le contrôleur à twig param puis le restituer.

1
Jean-Luc Barat