dasprid/container-interop-doctrine

此包已被废弃且不再维护。作者建议使用 roave/psr-container-doctrine 包。

PSR-11 的 Doctrine 工厂

1.1.0 2018-01-24 23:25 UTC

This package is auto-updated.

Last update: 2020-02-06 17:49:17 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 正在查找当前工作目录中的配置文件,因此它将始终使用您当前所在的目录中的那个文件。