依赖于不存在的服务"模板"

时间:2018-02-18 20:15:43

标签: symfony symfony4

我尝试使用

# 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"但这似乎还不够。

3 个答案:

答案 0 :(得分:2)

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

composer require twig

应该做的伎俩。此外,通过Symfony 4中的服务自动装配,您无需在services.yml中手动声明它。

答案 1 :(得分:1)

使用 Symfony 4 ,您还可以使用新的DI功能(自Symfony 3.3以来已经可用):

他们会将所有内容简化为:

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

    Project\SomeBundle\Controller\SomeController: ~

如果您想了解更多真实的前/后示例,请阅读How to refactor to new Dependency Injection features in Symfony 3.3

答案 2 :(得分:0)

另一种解决方案是按照doc

中的说明在framework下添加配置
# app/config/packages/framework.yaml
framework:
    # ...
    templating: { engines: ['twig'] }