Symfony2 - 在 twig 模板中获取控制器的 return
Symfony2 - get the return of controller in twig template
我的树枝模板“backoffice.html.twig” 在 Egov/AdminBundle 上并扩展了 baseBO.html.twig
它包含这个块
{% 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 没有什么可以改变的:
render(controller("EgovPosteBundle:CcpAdmin:getDemandeEnCour"))
首先你需要将 var 注入你的 twig 模板
/**
* @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);
}
并将 var 访问到 twig 模板中
{% block notificationD %} {{count}} {% endblock %}
您的控制器:
// 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 %}
或者,如果您只想调用特定控制器的操作并在任何 twig 模板中呈现它的结果,您可以使用 render twig 函数。
你的控制器:
// 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 模板:
{{ count }}
在其他模板中,您现在可以渲染控制器的动作:
{% block notificationD %} {{ render(controller("AcmeDemoBundle:YourController:getDemandeEnCour")) }} {% endblock %}
另请参阅 Embedding other Controllers 了解更多详细信息。
张贴者表示,树枝扩展的工作量太大,但这里还是有一个例子:
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 }]
然后在任何需要它的模板中使用它:
{{ demande_count() }}
不用大惊小怪。没有混乱;
我的树枝模板“backoffice.html.twig” 在 Egov/AdminBundle 上并扩展了 baseBO.html.twig
它包含这个块
{% 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 没有什么可以改变的:
render(controller("EgovPosteBundle:CcpAdmin:getDemandeEnCour"))
首先你需要将 var 注入你的 twig 模板
/**
* @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);
}
并将 var 访问到 twig 模板中
{% block notificationD %} {{count}} {% endblock %}
您的控制器:
// 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 %}
或者,如果您只想调用特定控制器的操作并在任何 twig 模板中呈现它的结果,您可以使用 render twig 函数。
你的控制器:
// 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 模板:
{{ count }}
在其他模板中,您现在可以渲染控制器的动作:
{% block notificationD %} {{ render(controller("AcmeDemoBundle:YourController:getDemandeEnCour")) }} {% endblock %}
另请参阅 Embedding other Controllers 了解更多详细信息。
张贴者表示,树枝扩展的工作量太大,但这里还是有一个例子:
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 }]
然后在任何需要它的模板中使用它:
{{ demande_count() }}
不用大惊小怪。没有混乱;