Symfony 如何通过';模板化&x27;作为参数的服务组件?
我在“DynamicList”服务中有一个方法,它应该返回一个充满动态数据的select,但我得到的是“循环引用”: YML: 类别: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
<?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'));