2011-11-18 16 views
14

In template PHP posso usare funzioni PHP, per esempio:Usa la funzione PHP in TWIG?

foreach ($users as $user){ 
    echo someFunction($user->getName()); 
} 

Come posso fare in TWIG?

{% for user in users %} 
    * {{ user.name }} 
{% else %} 
    No user have been found. 
{% endfor %} 

Come ottengo questo?

risposta

12

Quello che ti serve sono functions o filters. Puoi facilmente aggiungerli usando gli esempi.

+2

Potrebbe includere alcuni dettagli sull'implementazione? La funzione e l'istanziazione della classe "Twig_Environment" dovrebbero essere incluse nel controller? L'oggetto "$ twig = new Twig_Environment ($ loader)" deve essere passato come variabile (ad esempio "twig" => $ twig) al modello renderizzato? Cosa dovrebbe essere incluso in "/ percorso/per/modelli" nella definizione "$ loader = new Twig_Loader_Filesystem ('/ percorso/a/modelli');". È questo il percorso per i modelli nel mio pacchetto? ha bisogno di essere assoluto? Per me non funziona. Un esempio sarebbe più apprezzato ... – RayOnAir

+0

Per chi arriva qui e vuole un esempio, c'è un esempio molto buono e semplice nella documentazione di Twig su sensiolabs: http://twig.sensiolabs.org/doc/advanced.html# funzioni – h00ligan

9
// $twig is a Twig_Environment instance. 

$twig->registerUndefinedFunctionCallback(function($name) { 
    if (function_exists($name)) { 
     return new Twig_SimpleFunction($name, function() use($name) { 
      return call_user_func_array($name, func_get_args()); 
     }); 
     return false; 
    } 
}); 

In un modello ramoscello:

{{ explode(",", "It's raining, cats and dogs.").0 | raw }} 

questa uscita volontà "Piove". Per impostazione predefinita, i valori restituiti sono sfuggiti in Twig.

Twig_SimpleFunction è la classe preferita da utilizzare. Tutte le altre classi relative alla funzione in Twig sono deprecate da 1.12 (da rimuovere in 2.0).

In un controller di Symfony2:

$twig = $this->get('twig'); 
+0

dove dovrebbe essere registrato nell'app standard di symfony2? – gondo

+0

Questo non dovrebbe mai, mai essere usato in quanto è terribilmente insicuro. –

+0

Non proprio, non si trasforma improvvisamente in un wordpress. Ma i modelli dovrebbero solo rendere HTML/Javascript usando i dati disponibili. –

1

C'è già un'estensione Twig che ti permette di chiamare funzioni PHP formano i modelli Twig come:

Hi, I am unique: {{ uniqid() }}. 

And {{ floor(7.7) }} is floor of 7.7. 

vedi Gazzetta extension repository.