我在普通的symfony2控制器中有这个代码:
$temp = $this->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
'c'=> $content[$i],
'ordernumber' => 1,
));
它运作正常。
现在我正在尝试将其移至服务中,但我不知道如何访问普通控制器的$ this等价物。
我尝试像这样注射容器:
$systemContainer = $this->container;
$temp = $systemContainer->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
'c'=> $content[$i],
'ordernumber' => 1,
));
但是这不起作用,我猜这是因为渲染器并没有真正使用普通控制器的$ this->容器,而只使用$ this部分。
任何人都知道如何从服务中使用$ this-> render()?
答案 0 :(得分:19)
检查render
课程中的方法Symfony\Bundle\FrameworkBundle\Controller
。它说:
return $this->container->get('templating')->render($view, $parameters);
因为您的服务中已经有容器,您可以像上面的示例一样使用它。
注意:将整个容器注入服务被认为是不好的做法,在这种情况下你应该只注入模板引擎并在模板对象上调用render
方法。
如此完整的图片:
services.yml
:
services:
your_service_name:
class: Acme\YourSeviceClass
arguments: [@templating]
你的班级:
public function __construct($templating)
{
$this->templating = $templating
}
和你的渲染电话:
$this->templating->render($view, $parameters)
答案 1 :(得分:4)
使用构造函数依赖注入(使用Symfony 3.4测试):
class MyService
{
private $templating;
public function __construct(\Twig_Environment $templating)
{
$this->templating = $templating;
}
public function foo()
{
return $this->templating->render('bar/foo.html.twig');
}
}