saxulum/saxulum-doctrine-mongodb-odm-provider

此包已被弃用且不再维护。作者建议使用chubbyphp/chubbyphp-laminas-config-doctrine包。

Saxulum Doctrine MongoDB ODM Provider

2.5.2 2017-11-02 08:31 UTC

This package is auto-updated.

Last update: 2021-10-02 20:01:16 UTC


README

与 plain silex-php 兼容

Build Status Total Downloads Latest Stable Version

为 Pimple 应用程序提供 Doctrine MongoDB ODM 文档管理器作为服务。

特性

  • 默认文档管理器可以绑定到任何数据库连接
  • 可以定义多个文档管理器
  • 允许服务提供者注册自己的映射机制

要求

  • PHP 5.3+
  • Doctrine MongoDB ODM ~1.0

安装

通过Composersaxulum/saxulum-doctrine-mongodb-odm-provider的形式。

使用

要启动,请注册 DoctrineMongoDbOdmProvider 并手动指定将包含代理的目录以及至少一个映射。

在每个示例中,将提供一个绑定到默认数据库连接的文档管理器。它将通过 mongodbodm.dm 访问。

<?php

// Default document manager.
$em = $app['mongodbodm.dm'];

Pimple

<?php

use Pimple\Container;
use Saxulum\DoctrineMongoDb\Provider\DoctrineMongoDbProvider;
use Saxulum\DoctrineMongoDbOdm\Provider\DoctrineMongoDbOdmProvider;

$app = new Container;

$app->register(new DoctrineMongoDbProvider, [
    "mongodb.options" => [
        "server" => "mongodb://localhost:27017",
        "options" => [
            "username" => "root",
            "password" => "root",
            "db" => "admin"
        ],
    ],
]);

$app->register(new DoctrineMongoDbOdmProvider, [
    "mongodbodm.proxies_dir" => "/path/to/proxies",
    "mongodbodm.hydrator_dir" => "/path/to/hydrator",
    "mongodbodm.dm.options" => [
        "database" => "test",
        "mappings" => [
            // Using actual filesystem paths
            [
                "type" => "annotation",
                "namespace" => "Foo\Entities",
                "path" => __DIR__."/src/Foo/Entities",
            ],
            [
                "type" => "xml",
                "namespace" => "Bat\Entities",
                "path" => __DIR__."/src/Bat/Resources/mappings",
            ],
            [
                'type' => 'class_map',
                'namespace' => 'Bar\Entities',
                'map' => [
                    'Bar\Entities\Bar' => 'Sample\Mapping\Bar'    
                ]    
            ]
        ],
    ],
]);

配置

参数

  • mongodbodm.dm.options: 文档管理器选项数组。

    这些选项包括:

    • connection (默认: default): 定义要使用哪个数据库连接的字符串。当使用命名数据库通过 mongodbs 时使用。

    • database 应使用的数据库

    • mappings: 映射定义数组。

      每个映射定义应该是一个包含以下选项的数组

      • type: 映射驱动程序类型,可以是 annotationxmlymlsimple_xmlsimple_ymlphpclass_map 之一。
      • namespace: 实体所在的命名空间。

      此外,每个映射定义还应该包含以下选项之一

      • path: 映射文件所在的路径。这应该是一个实际的文件系统路径。对于 php 驱动程序,它可以是路径的数组
      • resources_namespace: 映射文件所在的“命名空间”路径。例如:`Path\To\Foo\Resources\mappings`

      每个映射定义可以有以下可选选项

      • alias (默认: null): 设置文档命名空间的别名。

      每个 annotation 映射还可以指定以下选项

      • use_simple_annotation_reader (默认: true): 如果设置为 true,则只有简单的注释如 @Document 将生效。如果设置为 false,则可以使用更高级的注释和通过 use 实现别名。例如:use Doctrine\ODM\MongoDB\Mapping AS ODM@ODM\Document。注意,如果设置为 false,则需要正确配置 AnnotationRegistry,以便它可以加载您的注释类。请参阅此常见问题解答:为什么找不到我的注释类?

      每个 php 映射也可以指定以下选项

      • static (默认: true): 如果设置为 true,则使用静态 PHP 驱动,这意味着每个文档都需要添加:public static function loadMetadata(ClassMetadata $metadata)。如果设置为 false,则使用 PHP 驱动,每个文档都需要一个映射文件

      每个 class_map 映射也可以指定以下选项

      • map: 数组的键表示实体类名,值表示实体类的映射
    • metadata_cache (默认: mongodbodm.default_cache 设置): 字符串或数组,描述了元数据缓存实现。

    • types 一个自定义类型的数组,格式为 'typeName' => 'Namespace\To\Type\Class'

  • mongodbodm.dms.options: 通过每个文档管理器的名称索引的文档管理器配置集数组。每个值应类似于 mongodbodm.dm.options

    示例配置

    <?php
    $app['mongodbodm.dms.default'] = 'sqlite';
    $app['mongodbodm.dms.options'] = [
         'mongo1' => [
             'server' => 'mongodb://localhost:27017',
             'options' => [
                 'username' => 'root',
                 'password' => 'root',
                 'db' => 'admin'
             ]
         ],
         'mongo2' => [
             'server' => 'mongodb://localhost:27018',
             'options' => [
                 'username' => 'root',
                 'password' => 'root',
                 'db' => 'admin'
             ]
         ]
    ];

    示例用法

    <?php
    $emMysql = $app['mongodbodm.dms']['mongo1'];
    $emSqlite = $app['mongodbodm.dms']['mongo2'];
  • mongodbodm.dms.default (默认: 处理的第一个文档管理器): 定义默认文档管理器名称的字符串。

  • mongodbodm.proxies_dir: 定义 Doctrine 生成的代理文件应位于的路径的字符串。

  • mongodbodm.proxies_namespace (默认: DoctrineProxy): 定义 Doctrine 生成的代理文件应位于其中的命名空间的字符串。

  • mongodbodm.auto_generate_proxies: 定义是否自动生成代理的布尔值。

  • mongodbodm.hydrator_dir: 定义 Doctrine 生成的 hydrator 文件应位于的路径的字符串。

  • mongodbodm.hydrator_namespace (默认: DoctrineHydrator): 定义 Doctrine 生成的 hydrator 文件应位于其中的命名空间的字符串。

  • mongodbodm.default_cache: 描述默认缓存实现的字符串或数组。

  • mongodbodm.add_mapping_driver: 函数提供将映射驱动程序添加到文档管理器的功能。

    以下参数可用

    • $mappingDriver: 要添加的映射驱动程序,实例 Doctrine\Common\Persistence\Mapping\Driver\MappingDriver
    • $namespace: 要由 $mappingDriver 映射的命名空间,字符串。
    • $name: 要添加映射的文档管理器的名称,字符串,默认 null
  • mongodbodm.dm_name_from_param: 函数提供从参数检索文档管理器名称的功能。

    这非常有用,可以可选地允许用户指定为第三方服务提供商配置哪个文档管理器,如果没有明确指定,则回退到默认文档管理器。

    例如

    <?php
    $emName = $app['mongodbodm.dm_name_from_param']('3rdparty.provider.dm');
    $em = $app['mongodbodm.dms'][$emName];

    此代码可以在第三方服务提供商中安全使用,无论用户是否定义了 3rdparty.provider.dm

服务

  • mongodbodm.dm: 文档管理器,实例 Doctrine\ODM\MongoDB\DocumentManager
  • mongodbodm.dms: 文档管理器,Doctrine\ODM\MongoDB\DocumentManager 的数组,按名称索引。

常见问题解答

为什么找不到我的注释类?

当对一个文档设置 use_simple_annotation_readerFalse 时,需要将项目的自动加载器添加到 AnnotationRegistry 中。

示例

<?php
$loader = require __DIR__ . '/../vendor/autoload.php';

\Doctrine\Common\Annotations\AnnotationRegistry::registerLoader([$loader, 'loadClass']);

许可证

MIT,见 LICENSE 文件。

社区

如果您有任何问题或想要提供帮助,请加入 irc.freenode.net 上的 #silex-php 频道。

非原创

该项目大量基于 @dflydevdflydev/dflydev-doctrine-orm-service-provider 项目上的工作。

版权