webentwicklung-frage-antwort-db.com.de

So erhalten Sie Konfigurationsparameter in Symfony2 Twig Templates

Ich habe eine Symfony2 Twig template. Ich möchte den Wert eines config-Parameters in dieser twig template (eine Versionsnummer) ausgeben. Deshalb habe ich die config definiert Parameter wie folgt:

parameters:
    app.version: 0.1.0

Ich kann diesen Konfigurationsparameter in Controllern verwenden, aber ich habe keine Ahnung, wie ich ihn in meiner Twig Vorlage erhalten soll.

159
Timo

Einfach können Sie in Ihrer Konfigurationsdatei definieren:

twig:
    globals:
        version: "0.1.0"

Und greifen Sie in Ihre Vorlage mit

{{ version }}

Andernfalls muss es ein Weg mit einer Twig Erweiterung sein, um Ihre Parameter offenzulegen.

185
webda2l

Sie können die Parametersubstitution im Abschnitt twig globals der Konfiguration verwenden:

Parameterkonfiguration:

parameters:
    app.version: 0.1.0

Zweigkonfiguration:

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

Zweigvorlage:

{{ version }}

Diese Methode bietet den Vorteil, dass Sie den Parameter auch in ContainerAware Klassen verwenden können, indem Sie Folgendes verwenden:

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

Sie können auch das integrierte System für Dienstparameter nutzen, mit dem Sie den Wert isolieren oder wiederverwenden können:

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

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

Jetzt ist die Variable ga_tracking in allen Twig Vorlagen verfügbar:

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

Der Parameter ist auch in den Steuerungen verfügbar:

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

Sie können einen Service auch als globale Twig Variable (Symfony2.2 +) definieren:

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

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

Wenn die globale Variable, die Sie festlegen möchten, komplizierter ist - beispielsweise ein Objekt -, können Sie die oben beschriebene Methode nicht verwenden. Stattdessen müssen Sie eine Twig Extension erstellen und die globale Variable als einen der Einträge in der getGlobals-Methode zurückgeben.

86

In neueren Versionen von Symfony2 (mit einem parameters.yml anstatt parameters.ini) können Sie Objekte oder Arrays anstelle von Schlüssel-Wert-Paaren speichern, sodass Sie Ihre Globals folgendermaßen verwalten können:

config.yml (nur einmal bearbeitet):

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

parameters.yml:

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

Und dann können Sie in einer twig Datei {{ project.version }} oder {{ project.name }}.

Hinweis: Ich persönlich mag es nicht, Dinge zu app hinzuzufügen, nur weil dies die Symfony-Variable ist und ich nicht weiß, was dort in Zukunft gespeichert wird.

19
Alain Tiemblo

Die obigen Angaben sind korrekt und funktionieren einwandfrei. Ich habe es anders benutzt.

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%

Innerhalb des Controllers:

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

Innerhalb der Vorlage/Zweig-Datei:

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

So verwenden Sie den Controller-Ausgang:

Controller:

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

template/twig file:

Project version {{ app_version }}

Ich erwähnte die verschiedenen zum besseren Verständnis.

16

Mit der Erweiterung Twig können Sie eine parameterTwig-Funktion erstellen:

{{ 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

Sie können $this->getParameter('app.version') im Controller einfach an twig param binden und dann rendern.

1
Jean-Luc Barat