我尝试使用
# 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"但这似乎还不够。
答案 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'] }