繁体   English   中英

Symfony 2.8注射枝条

[英]Symfony 2.8 injecting twig

预注:我正在从Drupal 7背景中学习Symfony。

我已经创建了一个自定义模型(虽然我认为它们在我读过的内容中被称为Symfony中的服务),并且希望它通过twig将数组渲染为变量。

我找到了这个链接,并认为这种注入方法可以解决这个问题: http//symfony.com/doc/2.8/service_container.html

可悲的是,我和以下错误:

类型错误:传递给AppBundle \\ Model \\ Newsletter :: __ construct()的参数1必须是AppBundle \\ Model \\ Twig_Environment的实例,没有给出,在/ home / dan / working_files / symfony-playground / src / AppBundle / Controller /中调用第130行的DefaultController.php

所以,我想知道什么是可接受的方法,所以我可以在我的自定义模型/服务/类中使用twig?

如果它有用,这里有一些我的代码供参考:

services.yml

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@twig']

的src /的appbundle /型号/ Newsletter.php

namespace AppBundle\Model;

class Newsletter
{
    private $twig;
    public function __construct(Twig_Environment $twig)
    {
        $this->twig = $twig;
    }
}

打电话给我的模特

$newsletter = new Newsletter();

尝试使用EngineInterface更改twig,如下所示:

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@templating']

namespace AppBundle\Model;

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class Newsletter
{
    private $twig;
    public function __construct(EngineInterface $templating)
    {
        $this->twig = $templating;
    }
}

您需要o调用服务后:

$this->get('service_name');

当你致电$newsletter = new Newsletter(); 您没有通过依赖注入容器访问该服务,忽略您所做的服务定义。

要利用DIC并在服务上注入@twig等依赖@twig ,您应该使用服务容器获取服务实例。 要在Symfony控制器上执行此操作,您可以这样做:

$newsletter = $this->get('appbundle.newsletter');

@twig将按照yaml文件中的定义注入您的服务,并在您通过容器再次使用服务的每个地方之间共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM