Symfony / Twig:在树枝模板中打印函数返回

时间:2015-05-14 16:07:51

标签: php symfony service twig

我想做类似的事情:

{{ 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 }

这是正确的方法吗?

2 个答案:

答案 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;
}

我希望它有所帮助。