对不存在的服务的依赖 "templating"

Dependency on a non-existent service "templating"

我尝试使用

# app/config/services.yml
services:
    project.controller.some:
        class: Project\SomeBundle\Controller\SomeController
        arguments: ['@templating']

namespace Project\SomeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\HttpFoundation\Response;

class SomeController
{
    private $templating;

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

    public function indexAction()
    {
        return $this->templating->render(
            'SomeBundle::template.html.twig',
            array(

            )
        );
    }
}

在 Symfony 4 flex 中。现在我得到错误

ServiceNotFoundException

The service "project.controller.some" has a dependency on a non-existent service "templating".

请告诉我如何解决这个问题。我的 composer.json 已经包含 "symfony/templating": "^4.0" 但这似乎还不够。

Symfony 4 默认不包含 Twig,因此您需要先安装它:

composer require twig

应该可以解决问题。此外,通过 Symfony 4 中的服务自动装配,您无需在 services.yml.

中手动声明它

使用 Symfony 4 您还可以使用新的 DI 功能(从 Symfony 3.3 开始可用):

他们将全部简化为:

# app/config/services.yml
services:
    _defaults:
        autowired: true

    Project\SomeBundle\Controller\SomeController: ~

如果您想通过真实的 before/after 示例了解更多信息,请阅读 How to refactor to new Dependency Injection features in Symfony 3.3

另一种解决方案是在 framework 下添加配置,如 doc

中所述
# app/config/packages/framework.yaml
framework:
    # ...
    templating: { engines: ['twig'] }