Symfony 如何通过';模板化&x27;作为参数的服务组件?

Symfony 如何通过';模板化&x27;作为参数的服务组件?,symfony,Symfony,我在“DynamicList”服务中有一个方法,它应该返回一个充满动态数据的select,但我得到的是“循环引用”: YML: 类别: <?php namespace My\DynamicListBundle\Service; use Doctrine\ORM\EntityManager; use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; class DynamicList { private $em

我在“DynamicList”服务中有一个方法,它应该返回一个充满动态数据的select,但我得到的是“循环引用”:

YML:

类别:

<?php

namespace My\DynamicListBundle\Service;

use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class DynamicList
{
    private $em;
    private $templating;

    public function __construct(
        EntityManager $em,
        EngineInterface $templating
    ) {
        $this->em = $em;
        $this->templating = $templating;
    }

    public function getSelect($slug)
    {
        $dynamic_list = $this->em
            ->getRepository('MyDynamicListBundle:DynamicList')
            ->findOneBy(array(
                "slug" => $slug
            ));

        return $this->templating->render('MyComponentsCoreBundle::Templates/DynamicList/combo.html.twig', array(
            'dl' => $dynamic_list
        ));
    }
}

让模板组件在我的服务中工作的正确方法是什么?

嗯,我找到了一个解决方法,但我不知道这是否是最好的方法:

<?php

namespace My\DynamicListBundle\Service;

use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class DynamicList
{
    private $em;
    private $templating;

    public function __construct(
        EntityManager $em
    ) {
        $this->em = $em;
    }

    public function init(
        EngineInterface $templating
    ) {
        $this->templating = $templating;
    }

    public function getSelect($slug)
    {
        $dynamic_list = $this->em
            ->getRepository('MyDynamicListBundle:DynamicList')
            ->findOneBy(array(
                "slug" => $slug
            ));

        return $this->templating->render('MyComponentsCoreBundle::Templates/DynamicList/combo.html.twig', array(
            'dl' => $dynamic_list
        ));
    }
}

根据,如果您需要模板服务,那么注入整个服务容器更容易。好的,我会这样做,因为我需要取得进展。。。但我害怕注入容器()。
Circular reference detected for service "my.dynamic_list", path: "my.dynamic_list -> templating -> twig". (500 Internal Server Error - ServiceCircularReferenceException)
<?php

namespace My\DynamicListBundle\Service;

use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class DynamicList
{
    private $em;
    private $templating;

    public function __construct(
        EntityManager $em
    ) {
        $this->em = $em;
    }

    public function init(
        EngineInterface $templating
    ) {
        $this->templating = $templating;
    }

    public function getSelect($slug)
    {
        $dynamic_list = $this->em
            ->getRepository('MyDynamicListBundle:DynamicList')
            ->findOneBy(array(
                "slug" => $slug
            ));

        return $this->templating->render('MyComponentsCoreBundle::Templates/DynamicList/combo.html.twig', array(
            'dl' => $dynamic_list
        ));
    }
}
$dl_service = $this->get('my.dynamic_list');
$dl_service->init($this->container->get('templating'));