liveecommerce/container-interop-doctrine

PSR-11 的 Doctrine 工厂

dev-master 2023-08-23 00:44 UTC

This package is auto-updated.

Last update: 2024-09-23 03:31:46 UTC


README

此仓库已弃用 - 请访问 https://github.com/Roave/psr-container-doctrine

Latest Stable Version Total Downloads Build Status Coverage Status

Doctrine 工厂为 PSR-11 (之前称为 container-interop)。

此包提供了一组工厂,用于在项目中使用 PSR-11 标准的容器,以实现 Doctrine 的简单集成。

安装

安装此包的最简单方法是使用 composer

$ composer require dasprid/container-interop-doctrine

配置

在一般情况下,如果您只使用单个连接,只需定义实体管理器工厂即可

return [
    'dependencies' => [
        'factories' => [
            'doctrine.entity_manager.orm_default' => \ContainerInteropDoctrine\EntityManagerFactory::class,
        ],
    ],
];

如果您想添加第二个连接或使用不同于 "orm_default" 的名称,可以通过使用工厂的静态变体来实现

return [
    'dependencies' => [
        'factories' => [
            'doctrine.entity_manager.orm_other' => [\ContainerInteropDoctrine\EntityManagerFactory::class, 'orm_other'],
        ],
    ],
];

此包提供的每个工厂默认情况下都会在容器中查找已注册的工厂。如果找不到,它将自动从动态创建的工厂中获取其依赖项。这可以省去您在容器中注册可能根本不需要的工厂的麻烦。当然,您可以在需要时始终注册这些工厂。以下是一些额外的工厂

  • \ContainerInteropDoctrine\CacheFactory (doctrine.cache.*)
  • \ContainerInteropDoctrine\ConnectionFactory (doctrine.connection.*)
  • \ContainerInteropDoctrine\ConfigurationFactory (doctrine.configuration.*)
  • \ContainerInteropDoctrine\DriverFactory (doctrine.driver.*)
  • \ContainerInteropDoctrine\EventManagerFactory (doctrine.event_manager.*)

这些工厂中的每个都支持与实体管理器工厂相同的静态行为。对于特定容器的配置,示例目录中提供了一些示例

示例配置

完整的示例配置可以在 example/full-config.php 中找到。请注意,那里的值是默认值,当您不更改它们时不必提供。尽量保持您的配置尽可能简单。最小配置可以在 example/minimal-config.php 中找到

使用 Doctrine CLI

为了能够使用 Doctrine 的 CLI 工具,您需要在项目目录中设置一个 cli-config.php 文件。该文件通常很短,对于您来说可能看起来像这样

<?php
$container = require 'config/container.php';

return new \Symfony\Component\Console\Helper\HelperSet([
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper(
        $container->get('doctrine.entity_manager.orm_default')
    ),
]);

之后,您只需调用 php vendor/bin/doctrine。如果您有多个实体管理器,这可能会变得稍微复杂一些。Doctrine 本身没有处理这种情况的方法,因此一种可能的方式是拥有两个独立的目录,每个目录都有两个唯一的 cli-config.php 文件。然后您从各自的目录中调用 doctrine CLI。由于 CLI 在当前工作目录中查找配置文件,因此它将始终使用您当前所在的目录中的那个。