php - Symfony - 在服务中注入(inject)原则存储库

标签 php symfony doctrine-orm symfony-3.4

根据 How to inject a repository into a service in Symfony2? 就像

acme.custom_repository:
    class: Doctrine\ORM\EntityRepository
    factory: ['@doctrine.orm.entity_manager', getRepository]
    arguments:
        - 'Acme\FileBundle\Model\File'

但是我得到一个异常

Invalid service "acme.custom_repository": class "EntityManager5aa02de170f88_546a8d27f194334ee012bfe64f629947b07e4919__CG__\Doctrine\ORM\EntityManager" does not exist.

我如何在 Symfony 3.4 中执行此操作?

更新:

EntityClass 实际上是一个有效的类 FQCN(当然也使用了 phpstorm 上的复制引用),只是重命名了它,因为其中有一个公司名称 :)。无论如何更新它。

解决方案

BlueM 的 solution工作完美。 如果您不使用 Autowiring ,这里是服务定义:

Acme\AcmeBundle\Respository\MyEntityRepository:
    arguments:
        - '@Doctrine\Common\Persistence\ManagerRegistry'
        - Acme\AcmeBundle\Model\MyEntity # '%my_entity_class_parameter%'

最佳答案

当您使用 Symfony 3.4 时,您可以使用更简单的方法,使用 ServiceEntityRepository。只需实现您的存储库,让它扩展ServiceEntityRepository,您就可以简单地注入(inject)它。 (至少在使用 Autowiring 时——我没有在经典的 DI 配置中使用它,但我认为它应该也能工作。)

换句话说:

namespace App\Repository;

use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Common\Persistence\ManagerRegistry;

class ExampleRepository extends ServiceEntityRepository
{
    /**
     * @param ManagerRegistry $managerRegistry
     */
    public function __construct(ManagerRegistry $managerRegistry)
    {
        parent::__construct($managerRegistry, YourEntity::class);
    }
}

现在,无需任何 DI 配置,您可以在任何需要的地方注入(inject)存储库,包括 Controller 方法。

一个警告(这同样适用于您尝试注入(inject)存储库的方式):如果 Doctrine 连接被重置,您将拥有对陈旧存储库的引用。但是恕我直言,这是我接受的风险,否则我将无法直接注入(inject)存储库..

关于php - Symfony - 在服务中注入(inject)原则存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49158947/

相关文章:

php - 从mysqli_query()返回数组

php - 带有包含未转义通配符 '%'(百分比)或 '_'(下划线)的转义字符串的 mysql LIKE 语句是否易受攻击?

php - Symfony ajax 响应但带有 header : HTTP/1. 0 200 OK Cache-Control: no-cache Date

php - DQL 关联和 lat lon 距离

php - ZF2+无 Composer 主义

php - Doctrine2 在字段数组中按值查找

php - 在 iPhone 网络应用程序上维护 PHP session

php - 访问Vagrant box中的错误日志查看 'internal server errors'

php - 使用 parameter.yml 值的 Symfony 3 Datafixtures

symfony - Doctrine 中的 Dql 选择 vs sql 查询