davidkmenta/repo-service-bundle

此包已被废弃,不再维护。未建议替代包。

将 Doctrine 仓库声明为 Symfony 服务

dev-master 2016-10-03 19:25 UTC

This package is auto-updated.

Last update: 2023-12-17 08:21:47 UTC


README

仅限实验使用!

RepoServiceBundle 提供了将 Doctrine 仓库声明为 Symfony 服务的能力。

需求

  • Symfony >= 3
  • Doctrine >= 2.5
  • PHP >= 5.6

安装

使用 composer 需求此包

composer require davidkmenta/repo-service-bundle "dev-master"

在内核中启用此包

<?php
// app/AppKernel.php
 
public function registerBundles()
{
    $bundles = [
        // ...
        new DavidKmenta\RepoServiceBundle\RepoServiceBundle(),
        // ...
    ];
}

文档

  • 注意:此包覆盖了 doctrine.orm.entity_manager.class 选项并设置了一个自己的实体管理器。
  • 首先,您需要创建或更新您的仓库类。仓库类必须扩展 DavidKmenta\RepoServiceBundle\Repository\EntityRepository 类。
  • 现在,您必须实现一个 getMappedEntityName 方法,该方法告诉实体管理器此仓库管理的是哪个实体。最佳实践是返回一个完全限定的类名
<?php

namespace AcmeBundle\Repository;

use AcmeBundle\Entity\CustomEntity;
use DavidKmenta\RepoServiceBundle\Repository\EntityRepository;
use Psr\Log\LoggerInterface;

class CustomRepository extends EntityRepository
{
    public function __construct(LoggerInterface $logger)
    {
        // ...
    }
    
    public function getMappedEntityName()
    {
        return CustomEntity::class;
    }
}
  • 最后一步是将仓库定义为服务。这与其他定义一样简单
acme.repository.custom:
    class: AcmeBundle\Repository\CustomRepository
    arguments: ["@logger"]
    tags:
        - { name: doctrine.repository }

就是这样!是的,诀窍在于标签 doctrine.repository :-) ,并且日志记录器像您预期的那样被注入。

待办事项和已知问题

  • 不要使用 getMappedEntityName 方法,通过类注解声明实体名称。
  • 不支持自定义实体管理器。

免责声明

使用此包风险自担。

许可证

MIT

贡献

任何贡献都受欢迎 :-)