缺少参数1的方法,参数是Symfony 3中的服务注入

时间:2017-05-20 23:55:56

标签: php symfony oop doctrine symfony-3.2

我有这样的服务链接到我的实体中的一个方法:

entity_form:
    class: AppBundle\Entity\EntityForm
    calls:
         - [setDoctrine, ['@doctrine']]

该参数将(或至少应该) doctrine 注入我的实体,以便我可以从方法中的db中获取内容。

我为getter设置了它,因为我不得不在__construct中省略设置参数,因为在代码中,类永远不会"构造"

实体本身如下:

<?php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="entity_form")
 */
class EntityForm
{

    protected $id;

    protected $url;

    protected $name;

    protected $className;

    protected $description;

    private $doctrine;


    public function getId()
    {
        return $this->id;
    }

    /* _All Getters An Setters Here.._ */

    private function setDoctrine($doctrine)
    {
        return $doctrine;
    }

    public function createEntity($id)
    {
        $this->setDoctrine();

        $entityPath = sprintf('AppBundle:%s:%s', __NAMESPACE__, $this->getClassName());

        var_dump($this->doctrine);
        exit;
        //var_dump is temponary and only for testing the doctrine 

        $entity = $this->doctrine->getRepository($entityPath)->find($id);

        return $entity;
    }
}

此实体存储有关网站表单的信息。有了这个,我想很好地快速创建表格的实体,从给定的Id。

不幸的是

运行此类代码会出现此错误:

  

警告:缺少参数1   调用的AppBundle \ Entity \ EntityForm :: setDoctrine()   第139行的C:\ PHP \ Repos \ centaur \ src \ AppBundle \ Entity \ EntityForm.php   和定义

发生此错误的原因是什么?我该如何解决?

任何帮助都会很棒

1 个答案:

答案 0 :(得分:-1)

  

论证将(或至少应该)学说注入我的实体中   我可以从db里面的方法中获取东西。

没有

您使用setter-injection entity_form服务定义了AppBundle\Entity\EntityForm服务,其价格仅为doctrine

因此,带有注入服务的EntityForm在容器中可用,它不会被注入到每个创建的EntityForm中。

看起来你应该阅读更多有关责任的内容。您希望在createEntity方法中实现的内容应该是应用程序服务层的一部分,而不是模型本身。

模型不了解应用程序/基础结构概念,因此注入ORM不行。

关于提到的错误,仅考虑服务定义和该调用:

$this->setDoctrine();

你想在没有必要参数的情况下调用setter,可能错过了你的服务定义已经进行了setter-injection。

正如我之前提到的,实体基本上不是服务,所以将该部分移动到特定的类中,并使用标准DI注入与数据库相关的服务。