2016-05-13 4 views
0

Ich muss eine PHP-Funktion innerhalb einer Vorlage TWIG aufrufen. Wie und wo füge ich diese Funktion ein? Hier mein Beispiel: Mein Controller ist:Symfony2 und Twig: Wie und wo füge ich eine PHP-Funktion zur Verwendung in TWIG ein?

namespace BackendBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

use BackendBundle\Entity\Comisiones; 
use BackendBundle\Entity\Liquidaciones; 
use BackendBundle\Form\ComisionesType; 
use BackendBundle\Form\LiquidacionesType; 

    /** 

* Comisiones controller. 
* 
*/ 
class ComisionesController extends Controller 
{ 
    /** 
    * Lists all Comisiones entities. 
    * 
    */ 
    public function indexAction() 
    { 
     $twig = new Twig_Environment($loader); 
     $function = new Twig_SimpleFunction("decir_hola", function() { 
     $saludo='Hola!'; 
     return $saludo; 
     }); 
     $em = $this->getDoctrine()->getManager(); 

    $comisiones = $em->getRepository('BackendBundle:Comisiones')->findComisio(); 

    return $this->render('comisiones/index.html.twig', array(
     'comisiones' => $comisiones, 
    )); 
} 

Mein Zweig Vorlage:

{% block body %} 
{{decir_hola()}} 

{% endblock %} 

Aber ich bekomme diese Fehlermeldung:

Versuchte Klasse "Twig_Environment" von Namensraum zu laden "BackendBundle \ Controller". Haben Sie eine Anweisung "use" für einen anderen Namespace vergessen?

Was fehlt?

Antwort

3

Sie müssen den Klassennamen von Twig mit einem umgekehrten Schrägstrich voranstellen (z. B. \Twig_Environment anstelle von Twig_Environment). Andernfalls behandelt PHP diese Klassennamen so, als wären sie Teil des aktuellen Namespace.

Sie sollten jedoch nicht Ihre benutzerdefinierten Twig-Funktionen, Filter usw. in Ihrem Controller registrieren, sondern stattdessen eine benutzerdefinierte Twig-Erweiterung registrieren. Sie können mehr darüber lesen in the Symfony documentation.

+0

Vielen Dank für Ihre schnelle Antwort! Ich bin ein Anfänger mit Twig und Symfony2. Ich kannte den Artikel nicht, der mir sagt. Ich werde es sofort lesen –

Verwandte Themen