Php Symfony 2.8注射细枝
预告:我正在从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.ymlPhp 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
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');
很高兴能帮到你!:)我用服务的缺失部分更新了答案