Php Symfony 2.8注射细枝

Php Symfony 2.8注射细枝,php,symfony,dependency-injection,model,Php,Symfony,Dependency Injection,Model,预告:我正在从Drupal7背景学习Symfony 我已经创建了一个自定义模型(尽管我认为根据我所读的内容,它们在Symfony中被称为服务),并且希望它通过细枝将数组渲染为变量 我找到了这个链接,并认为这种注入方法可以实现以下目的: 遗憾的是,我发现了以下错误: 类型错误:参数1传递给 AppBundle\Model\Newsletter::\uu construct()必须是的实例 AppBundle\Model\Twig\u环境,未给定,在中调用 /home/dan/working_fi

预告:我正在从Drupal7背景学习Symfony

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

我找到了这个链接,并认为这种注入方法可以实现以下目的:

遗憾的是,我发现了以下错误:

类型错误:参数1传递给 AppBundle\Model\Newsletter::\uu construct()必须是的实例 AppBundle\Model\Twig\u环境,未给定,在中调用 /home/dan/working_files/symfony playerly/src/AppBundle/Controller/DefaultController.php 在线130

所以,我想知道什么是可以接受的方法,这样我就可以在我的定制模型/服务/类中使用twig了

如果有用,以下是我的一些代码供参考:

services.yml

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@twig']
$newsletter = new Newsletter();
src/AppBundle/Model/Newsletter.php

namespace AppBundle\Model;

class Newsletter
{
    private $twig;
    public function __construct(Twig_Environment $twig)
    {
        $this->twig = $twig;
    }
}
调用我的模型

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@twig']
$newsletter = new Newsletter();

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

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@templating']
$newsletter = $this->get('appbundle.newsletter');

在您需要o呼叫服务后:

$this->get('service_name');

当您调用
$newsletter=new newsletter()时您没有通过依赖项注入容器访问服务,忽略了您所做的服务定义

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

services:
    appbundle.newsletter:
        class: AppBundle\Model\Newsletter
        arguments: ['@templating']
$newsletter = $this->get('appbundle.newsletter');

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

您应该调用您的模型作为服务来注入依赖项,如果您在控制器中调用它,您可以得到这样的服务
$newsletter=$this->get('appbundle.newsletter');
对不起,我不知道你的意思。行
$newsletter=new newsletter();
正在从
DefaultController.php
调用。所以controller有助手获取服务。只需调用
$this->get('service\u name'));
将为您提供注入依赖项的服务。如果您使用
新类名()调用类
然后您必须手动将twig实例传递给类构造函数。啊,太棒了,这一点和Alessandro的评论结合在一起帮助解决了这个问题,谢谢您的帮助。更改此项似乎无法解决问题。sadlySo有两个问题。一个是切换到EngineInterface,另一个是更改我调用的方式我修改了我的模型,所以我使用了
$this->get('service_name');
很高兴能帮到你!:)我用服务的缺失部分更新了答案