如何在定制服务中获得Tempating或Container?

时间:2017-08-04 06:58:37

标签: php symfony symfony-3.3

我有自定义服务,我想在Twig模板中使用它。 在Symfony< 3我能做到:

use Symfony\Component\DependencyInjection\Container;
//...
public function __construct(Container $container) 
{
    $this->container = $container;
}

public function getView()
{
    $this->container->get('templating')->render('default/view.html.twig');
}

但在Symfony 3.3中我有错误:

  

无法自动装配服务“AppBundle \ Service \ ViewService”:参数   方法“__construct()”的“$ container”引用类   “Symfony \ Component \ DependencyInjection \ Container”但没有这样的服务   存在。尝试将type-hint更改为其父级之一:interface   “Psr \ Container \ ContainerInterface”或接口   “的Symfony \元器件\ DependencyInjection \ ContainerInterface”。

1 个答案:

答案 0 :(得分:0)

这是not good idea to inject whole container。更好的是注入单个依赖项:

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class MyService
{
    private $templating;
    public function __construct(EngineInterface $templating)
    {
        $this->templating = $templating;
    }

    public function getView()
    {
        $this->templating->render('default/view.html.twig');
    }    
}