【问题标题】:Symfony 4 Dependency InjectionSymfony 4 依赖注入
【发布时间】:2019-01-05 11:49:37
【问题描述】:

我有这样的课,

use Doctrine\ORM\EntityManagerInterface;

class LoginTools {

private $em;

public function __construct(EntityManagerInterface $em)
{
    $this->em = $em;
}

在控制器中

$logTool = new LoginTools();

问题

autowire 是否应该自动将EntityManagerInterface 传递给LoginTools? 因为当我在没有传递参数的情况下调用LoginTools 类时,我得到了错误

Too few arguments to function App\Utils\LoginTools::__construct(), 0 passed exactly 1 expected

问候,

维克托。

【问题讨论】:

  • 你的类 LoginTools 是一项服务吗?你在调用什么函数?看起来你调用了你不需要做的构造函数。
  • @Dirk J. Faber 我认为是这样,因为当我在 cmd 中执行时 php bin/console debug:autowiring App\Utils\LoginTools 显示在顶部。我正在实例化类LoginTools,所以在这个过程中会触发构造函数,对吗? $logTool = new LoginTools();

标签: php dependencies code-injection symfony4


【解决方案1】:

正如你所说,LoginTools 是一项服务。这意味着,您不能像您那样在代码中创建它,Symfony 会为您创建它,您只需将该服务注入控制器而不是 EntityManagerInterface

问题是 Symfony 有 DI 容器,它的目的是根据您从 config/services.yaml 的配置创建服务,然后将它们注入到其他服务的构造函数/函数/属性中。没有魔法,所有这些创建你的服务并将它们注入其他服务的代码都是自动生成的,并由 Symfony 保存到var/cache 目录中,你可以自己检查。

【讨论】:

  • 非常感谢您的广泛回复 :) 所以我误解了它实际上是如何工作的(魔术),但现在我明白了。
猜你喜欢
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2015-03-02
相关资源
最近更新 更多