2015-03-10 4 views
5

Ist es möglich, globale Variablen in einer Zweigdatei zu setzen, so dass ich auf diese Variablen aus anderen Dateien, Makros und Blöcken zugreifen kann.Wie kann ich globale Variablen in einer Zweigvorlagedatei definieren?

Zum Beispiel möchte ich variables.twig Datei haben und darin meine Variablen einstellen und dann kann ich es in andere Vorlagen aufnehmen.

Ich weiß, dass die Einstellung globaler Variablen aus dem Framework (z. B. Symfony) möglich ist, aber ich möchte eine Lösung nur Zweigfunktionen verwenden.

+0

möglich Duplikat von [Symfony 2 + Twig globale Variablen] (http://stackoverflow.com/questions/9263903/symfony-2-twig-global-variables) – pbenard

Antwort

15

Mit Symfony2 Konfiguration

Wenn Sie Symfony2 verwenden, können Sie Globals in Ihrer config.yml Datei gesetzt:

# app/config/config.yml 
twig: 
    # ... 
    globals: 
     myStuff: %someParam% 

Und dann {{ myStuff }} überall in Ihrer Anwendung verwenden.


Mit Twig_Environment :: addGlobal

Wenn Sie Zweig verwenden in einem anderen Projekt, können Sie Ihre Globals direkt in die Umwelt gesetzt:

$twig = new Twig_Environment($loader); 
$twig->addGlobal('myStuff', $someVariable); 

Und dann verwenden {{ myStuff }} überall in Ihrer Anwendung .


einen Zweig Erweiterung verwenden

Wenn Sie viele globale Variablen haben und wollen nur eine Reihe von Globals für einen bestimmten Teil Ihrer Anwendung angeben, können Sie einen Zweig Erweiterung erstellen:

class Some_Twig_Extension extends Twig_Extension implements Twig_Extension_GlobalsInterface 
{ 
    public function getGlobals() 
    { 
     return array(
      'someStuff' => $this->myVar, 
      // ... 
     ); 
    } 

    // ... 
} 

importieren sie dann in Ihrer Umgebung nur bei Bedarf:

$twig = new Twig_Environment($loader); 
$twig->addExtension(new Project_Twig_Extension()); 

Und immer noch {{ myStuff }} irgendwo in Ihrer Anwendung.

einen Zweig Vorlage

Wenn Sie ein Stück Zweig Code einschließlich sind, du bist, das nur die gerenderte Ansicht von diesem Code kommt, nicht der Code selbst. Aus diesem Grund ist es nicht möglich, eine Reihe von Variablen so zu speichern, wie Sie es wünschen.

+0

Eine sehr gute, gründliche Antwort, danke für die Bereitstellung der Alternativen nur zur config.yml-Lösung! @ alain-tiemblo –

+0

Nur ein Hinweis: Die getGlobals() -Methode wurde veraltet. –

+0

Die zweite Methode löste mein Problem! Vielen Dank ! : D –