2016-03-01 2 views
1

моего шаблона веточки "backoffice.html.twig" на EGov/AdminBundle и расширяет baseBO.html.twigSymfony2 - получить возврат контроллера в шаблоне веточки

содержит этот блок

{% block notificationD %} {% endblock %} 

и в EGov/PosteBundle/Controller/CcpAdminController.php я иметь эту функцию

public function getDemandeEnCourAction() 
{ 
    $repo = $this ->getDoctrine() 
     ->getManager() 
     ->getRepository('EgovCoreBundle:DemandeCCP'); 

    $qb = $repo->createQueryBuilder('d'); 
    $qb->select('COUNT(d)'); 
    $qb->where('d.statut = :statut'); 
    $qb->setParameter('statut', 'en cour'); 
    $count = $qb->getQuery()->getSingleScalarResult(); 
    return $this->render('@EgovAdmin/Default/backoffice.html.twig', array(
     'count' => (int) $count, 
    )); 
} 

Так что, когда я делаю что

{% block notificationD %} {{ count }} {% endblock %} 

я есть это исключение:

Variable "count" does not exist in @EgovAdmin/Default/backoffice.html.twig 

и если я использую делают контроллер как этого ничего изменить:

render(controller("EgovPosteBundle:CcpAdmin:getDemandeEnCour")) 
+0

Это то, что предназначены для twig для: http://symfony.com/doc/current/cookbook/templating/twig_extension.html – Cerad

+0

Где ваш метод визуализации твинов вызывается внутри контроллера? Вам это не хватает. Там вы вставляете это vsriable. –

+0

@Cerad Я не хочу создавать Extension Class только у меня есть функция, я хочу использовать ее в шаблоне twig –

ответ

3

Плакат показал, что расширение веточка было слишком много работы, но вот пример в любом случае:

class MyExtension extends \Twig_Extension 
{ 
    private $em; 
    public function __construct($em) 
    { 
    $this->em = $em; 
    } 
    public function getFunctions() 
    { 
    return [    
     new \Twig_SimpleFunction('demande_count',[$this, 'getDemandeCount']), 
    ]; 
    } 
    public function getDemandeCount() 
    { 
    $repo = $this->em->getRepository('EgovCoreBundle:DemandeCCP'); 

    $qb = $repo->createQueryBuilder('d'); 
    $qb->select('COUNT(d)'); 
    $qb->where('d.statut = :statut'); 
    $qb->setParameter('statut', 'en cour'); 
    return $qb->getQuery()->getSingleScalarResult(); 
    } 

Определить в качестве услуги:

services: 
    demande_count: 
    class: MyExtension 
    arguments: ['@doctrine.orm.default_entity_manager'] 
    tags: [{ name: twig.extension }] 

Затем использовать его в любой шаблон нужно его :

Нет суеты. Нет мусс;

+0

th anks много я работаю: D –

0

сначала вам нужно ввести var в свою ветку Пластина

/** 
* @Route("/test", name="test") 
* @Template("target.html.twig") 
*/ 
public function getDemandeEnCourAction() 
{ 
    $repo = $this ->getDoctrine() 
     ->getManager() 
     ->getRepository('EgovCoreBundle:DemandeCCP'); 

    $qb = $repo->createQueryBuilder('d'); 
    $qb->select('COUNT(d)'); 
    $qb->where('d.statut = :statut'); 
    $qb->setParameter('statut', 'en cour'); 
    $count = $qb->getQuery()->getSingleScalarResult(); 
    return array('count' => $count); 
} 

и доступ вар в шаблон веточку

{% block notificationD %} {{count}} {% endblock %} 
+0

Переменная «count» не существует в файле twig –

+0

я обновил ответ – CodeIsLife

+0

тот же самый ошибка man Variable «count» не существует –

0

Ваш контроллер:

// AcmeDemoBundle:YourController:getDemandeEnCour 

/** 
* @Route("/test") 
*/ 
public function getDemandeEnCourAction() 
{ 
    $repo = $this->getDoctrine() 
     ->getManager() 
     ->getRepository('EgovCoreBundle:DemandeCCP'); 

    $qb = $repo->createQueryBuilder('d'); 
    $qb->select('COUNT(d)'); 
    $qb->where('d.statut = :statut'); 
    $qb->setParameter('statut', 'en cour'); 
    $count = $qb->getQuery()->getSingleScalarResult(); 

    return $this->render('AcmeDemoBundle:YourController:count.html.twig', array(
     'count' => (int) $count, 
    )); 
} 

Шаблон:

{% block notificationD %} {{count}} {% endblock %} 

Или вы можете использовать функцию твика render, если вы хотите вызвать только действие определенного контроллера и сделать его результатом любого шаблона ветки.

Ваш контроллер:

// AcmeDemoBundle:YourController:getDemandeEnCour 

public function getDemandeEnCourAction() 
{ 
    $repo = $this->getDoctrine() 
     ->getManager() 
     ->getRepository('EgovCoreBundle:DemandeCCP'); 

    $qb = $repo->createQueryBuilder('d'); 
    $qb->select('COUNT(d)'); 
    $qb->where('d.statut = :statut'); 
    $qb->setParameter('statut', 'en cour'); 
    $count = $qb->getQuery()->getSingleScalarResult(); 

    return $this->render('AcmeDemoBundle:YourController:count.html.twig', array(
     'count' => (int) $count, 
    )); 
} 

AcmeDemoBundle: шаблон count.html.twig:: YourController

{{ count }} 

В других шаблонов Теперь можно визуализировать действия контроллера:

{% block notificationD %} {{ render(controller("AcmeDemoBundle:YourController:getDemandeEnCour")) }} {% endblock %} 

См. Также Embedding other Controllers для более подробной информации.

+0

Я обновил свой вопрос для более подробного объяснения –

Смежные вопросы