2015-03-10 29 views
5

È possibile impostare variabili globali in un file di ramoscello, in modo che sia possibile accedere a tali variabili da altri file, macro e blocchi.Come posso definire le variabili globali all'interno di un file modello di ramoscello?

Ad esempio, voglio avere il file variables.twig e in esso impostare le mie variabili e quindi posso includerlo in altri modelli.

So che l'impostazione di variabili globali è possibile dal framework (ad esempio Symfony) ma voglio una soluzione utilizzando solo le funzionalità di ramoscello.

+0

possibile duplicato di [variabili globali di Symfony 2 + Twig] (http://stackoverflow.com/questions/9263903/symfony-2-twig-global-variables) – pbenard

risposta

15

Uso della configurazione di Symfony2

Se si utilizza Symfony2, è possibile impostare globali nel file config.yml:

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

e quindi utilizzare {{ myStuff }} ovunque nella vostra applicazione.


Utilizzando Twig_Environment :: addGlobal

Se si utilizza Twig in un altro progetto, è possibile impostare le variabili globali direttamente nell'ambiente:

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

e quindi utilizzare {{ myStuff }} ovunque nella vostra applicazione .


Utilizzando un'estensione Twig

Se hai un sacco di variabili globali e desidera specificare un insieme di variabili globali per una particolare parte della vostra applicazione solo, è possibile creare un'estensione Twig:

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

    // ... 
} 

quindi importarlo nel proprio ambiente solo quando richiesto:

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

E utilizzare ancora {{ myStuff }} in qualsiasi punto dell'applicazione.

Utilizzo di un modello Twig

Quando si è compreso un pezzo di codice Ramoscello, tra cui il gioco è solo la vista resa provenienti da tale codice, non il codice stesso. Pertanto, per impostazione non è possibile includere un insieme di variabili nel modo in cui si sta cercando.

+0

Una risposta molto buona e completa, grazie per aver fornito le alternative solo alla soluzione config.yml! @ alain-tiemblo –

+0

Solo una nota: il metodo getGlobals() è stato deprecato. –

+0

Il secondo metodo ha risolto il mio problema! Grazie ! : D –