2016-05-13 2 views
0

Мне нужно вызвать функцию PHP внутри шаблона TWIG. Как и где я вставляю эту функцию? Вот мой пример: Мой контроллер:Symfony2 и Twig: Как и где я могу вставить функцию PHP для использования в TWIG?

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, 
    )); 
} 

Мой Twig шаблон:

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

{% endblock %} 

Но я получаю сообщение об ошибке:

Пытался загрузить класс "Twig_Environment" из пространства имен "BackendBundle \ Controller". Вы забыли инструкцию «use» для другого пространства имен?

Что не хватает?

ответ

3

Вам необходимо указать имена классов из Twig с обратной косой чертой (например, \Twig_Environment вместо Twig_Environment). В противном случае PHP будет обрабатывать эти имена классов, как если бы они были частью текущего пространства имен.

Однако вы не должны регистрировать свои пользовательские функции Twig, фильтры и т. Д. Внутри вашего контроллера, но вместо этого зарегистрируйте собственное расширение Twig. Вы можете узнать больше об этом in the Symfony documentation.

+0

Большое спасибо за ваш быстрый ответ! Я новичок в Twig и Symfony2. Я не знал статью, которая говорит мне. Я сразу прочитаю –