对不存在的服务的依赖 "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'] }
我尝试使用
# 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'] }