我想做类似的事情:
{{ users_number() }} or {{ users_number }}
在Twig的模板中。我的服务如下:
class HomeExtension extends \Twig_Extension
{
public function getFunction()
{
return array(
new \Twig_SimpleFunction('users_number', array($this, 'getUsersNb'))
);
}
public function getName()
{
return 'users_number';
}
public function getUsersNb(){
$em = $this->getDoctrine()->getManager();
$countUsers = $em->getRepository("ASDPUsersBundle:Users")->getNb();
return $countUsers;
}
}
但是,在我看来,我无法获得我的价值。 我怎么能这样做?或者我在服务中遗漏了什么?
编辑: 我注册了我的服务:
services:
users_number:
class: ASDP\HomeBundle\Twig\Extension\HomeExtension
tags:
- { name : twig.extension }
这是正确的方法吗?
答案 0 :(得分:1)
试试这个:
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('users_number', array($this,'getUsersNb')))
);
}
你的扩展必须扩展\ Twig_Extension和服务必须有标签twig.extension:
<service class="Vendor\Bundle\Twig\Extension\YourExtension" id="your.extension.id">
<tag name="twig.extension"/>
</service>
或者在Yaml:
your.extension.id:
class: Vendor\Bundle\Twig\Extension\YourExtension
tags:
- { name: twig.extension }
答案 1 :(得分:1)
您需要在Twig Extension Service上注入实体管理器
your.extension.id:
class: Vendor\Bundle\Twig\Extension\YourExtension
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: twig.extension }
然后在自定义扩展程序中使用它:
protected $em;
public function __construct($em)
{
$this->translator = $translator;
}
// ...
public function getUsersNb()
{
$countUsers = $this->em->getRepository("ASDPUsersBundle:Users")->getNb();
return $countUsers;
}
我希望它有所帮助。