Symfony 4 依赖注入
Symfony 4 Dependency Injection
我有class这样的,
use Doctrine\ORM\EntityManagerInterface;
class LoginTools {
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
并在控制器中
$logTool = new LoginTools();
问题
autowire 是否应该自动将 EntityManagerInterface
传递给 LoginTools
?
因为当我调用 LoginTools
class 而不传递参数时,我得到错误
Too few arguments to function App\Utils\LoginTools::__construct(), 0 passed exactly 1 expected
此致,
维克托
如您所说,LoginTools
是一项服务。这意味着,你不能像你一样在代码中创建它,Symfony 会为你创建它,你只需将此服务注入控制器而不是 EntityManagerInterface
.
问题是 Symfony 有 DI 容器,它的目的是根据您在 config/services.yaml
中的配置创建服务,然后将它们注入到其他服务的 constructors/functions/properties 中。没有魔法,所有这些创建你的服务并将它们注入其他服务的代码都是自动生成的,并由 Symfony 保存到 var/cache
目录中,你可以自己检查。
我有class这样的,
use Doctrine\ORM\EntityManagerInterface;
class LoginTools {
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
并在控制器中
$logTool = new LoginTools();
问题
autowire 是否应该自动将 EntityManagerInterface
传递给 LoginTools
?
因为当我调用 LoginTools
class 而不传递参数时,我得到错误
Too few arguments to function App\Utils\LoginTools::__construct(), 0 passed exactly 1 expected
此致,
维克托
如您所说,LoginTools
是一项服务。这意味着,你不能像你一样在代码中创建它,Symfony 会为你创建它,你只需将此服务注入控制器而不是 EntityManagerInterface
.
问题是 Symfony 有 DI 容器,它的目的是根据您在 config/services.yaml
中的配置创建服务,然后将它们注入到其他服务的 constructors/functions/properties 中。没有魔法,所有这些创建你的服务并将它们注入其他服务的代码都是自动生成的,并由 Symfony 保存到 var/cache
目录中,你可以自己检查。