gpt4 book ai didi

symfony - 在 Symfony2 中将 Twig 作为服务注入(inject)

转载 作者:行者123 更新时间:2023-12-03 11:43:05 24 4
gpt4 key购买 nike

我不想扩展标准 Controller ,而是想将 Twig 注入(inject)我的一个类中。

Controller :

namespace Project\SomeBundle\Controller;

use Twig_Environment as Environment;

class SomeController
{
private $twig;

public function __construct( Environment $twig )
{
$this->twig = $twig;
}

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

然后在 services.yml我有以下内容:
project.controller.some:
class: Project\SomeBundle\Controller\SomeController
arguments: [ @twig ]

我得到的错误是:

SomeController::__construct() must be an instance of Twig_Environment, none given



但我传入 @twig通过 config .我看不出我做错了什么。

编辑:

添加正确的代码 - 这就是解决问题的原因:
// in `routing.yml` refer to the service you defined in `services.yml` 
project.controller.some
project_website_home:
pattern: /
defaults: { _controller: project.controller.some:index }

最佳答案

首先,让我们看看您的服务容器中可用的内容:

λ php bin/console debug:container | grep twig
twig Twig_Environment
...

λ php bin/console debug:container | grep templa
templating Symfony\Bundle\TwigBundle\TwigEngine
...

现在我们可能会选择 TwigEngine 类(模板服务)而不是 Twig_Enviroment( Twig 服务)。
您可以在 vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle\TwigEngine.php 下找到模板服务
...
class TwigEngine extends BaseEngine implements EngineInterface
{
...

在这个类中,你会发现两个方法 render(..) 和
renderResponse(...),这意味着您的其余代码应该可以在下面的示例中正常工作。您还将看到 TwigEngine 注入(inject)了 twig 服务(Twig_Enviroment 类)来构造它的父类 BaseEngine。因此,无需请求 twig 服务,请求 Twig_Environment 的错误应该会消失。

所以在你的代码中你会这样做:
# 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 - 在 Symfony2 中将 Twig 作为服务注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com