gpt4 book ai didi

symfony - 如何将存储库注入(inject)服务

转载 作者:行者123 更新时间:2023-12-01 04:58:19 25 4
gpt4 key购买 nike

我想将存储库注入(inject)服务。我的第一步是将存储库定义为服务,例如:

<service id="app.repository.user" class="AppBundle\Entity\UserRepository">
<factory class="doctrine" method="getRepository" />
<argument>AppBundle:User</argument>
</service>

在第二步中,我注入(inject)定义的存储库服务
<service id="app.registration_handler" class="AppBundle\Utils\RegistrationHandler">
<argument type="service" id="security.password_encoder" />
<argument type="service" id="app.repository.user" />
</service>

但我收到此错误消息:
Attempted to load class "doctrine" from the global namespace.
Did you forget a "use" statement?

我记得这在以前的版本中有效,有人有同样的问题和提示吗?

我正在使用 Symfony 3.01

更新:
我解决了我的问题。我错误地定义了一个类而不是一个服务,现在它可以工作了。
<factory service="doctrine" method="getRepository" />

最佳答案

自 2017 年以来和 Symfony 3.3+ 有很简单的方法可以做到这一点。

查看我的帖子How to use Repository with Doctrine as Service in Symfony 以获得更一般的描述。

对于您的代码 - 您需要做的就是创建自己的存储库作为服务。

1.创建自己的仓库,不直接依赖Doctrine

<?php

namespace AppBundle\Repository;

use Doctrine\ORM\EntityManagerInterface;

class UserRepository
{
private $repository;

public function __construct(EntityManagerInterface $entityManager)
{
$this->repository = $entityManager->getRepository(User::class);
}

// add desired methods here
public function findAll()
{
return $this->repository->findAll();
}
}

2. 添加配置注册 PSR-4 based autoregistration
# app/config/services.yml
services:
_defaults:
autowire: true

AppBundle\:
resource: ../../src/AppBundle

3. 将存储库注入(inject)任何服务或 Controller 现在很容易
<?php

namespace AppBundle\Controller;

use AppBundle\Repository\UserRepository;

class MyController
{
/**
* @var UserRepository
*/
private $userRepository;

public function __construct(UserRepository $userRepository)
{
$this->userRepository = userRepository
}
}

关于symfony - 如何将存储库注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com