df/silex-doctrine-mongodb-odm-provider

Silex Doctrine MongoDB ODM Provider for PHP 7.n,基于 saxulum 的 MongoDb ODM Provider

1.0.0 2016-08-01 00:00 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:48 UTC


README

此 Silex 服务提供者为 mongodb odm,基于 Dominik Zogg 的优秀存储库 [email protected],包含一些改进和重构,以实现 silex 3.n 和 php7 的兼容性。此文档尚未完成 - 我将在接下来的几天内构建第一个 1.0.0 稳定版本

Software License System Version PHP 7 ready Build Status

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

功能

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

要求

  • PHP 5.4+
  • Doctrine MongoDB ODM ~1.0

可选依赖

PSR-0 资源定位服务提供者

如果使用命名空间资源映射,则需要 dflydev/psr0-resource-locator-service-provider 的实现。有关更多信息,请参阅 mongodbodm.generate_psr0_mapping 的文档。

安装

通过 Composer 作为 df/silex-doctrine-mongodb-odm-provider 安装。

composer require df/silex-doctrine-mongodb-provider 

使用

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

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

<?php

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

Pimple

<?php

use DF\DoctrineMongoDb\Provider\DoctrineMongoDbProvider;
use DF\DoctrineMongoDbOdm\Provider\DoctrineMongoDbOdmProvider;

$container = new \Pimple;

$container["mongodb.options"] = [
    "server" => "mongodb://localhost:27017",
    "options" => [
        'username' => 'your-username',
        'password' => 'your-password',
        'db' => 'mongo_db_01'
    ]
];

$container["mongodbodm.proxies_dir"] = "/path/to/proxies";
$container["mongodbodm.hydrator_dir"] = "/path/to/hydrator";
$container["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",
        ],
        // Using PSR-0 namespace embedded resources
        // (requires registering a PSR-0 Resource Locator
        // Service Provider)
        [
            "type" => "annotation",
            "namespace" => "Baz\Entities",
            "resources_namespace" => "Baz\Entities",
        ],
        [
            "type" => "xml",
            "namespace" => "Bar\Entities",
            "resources_namespace" => "Bar\Resources\mappings",
        ],
    ],
];

$doctrineMongoDbServiceProvider = new DoctrineMongoDbProvider;
$doctrineMongoDbServiceProvider->register($container);

$doctrineMongoDbOdmServiceProvider = new DoctrineMongoDbOdmProvider;
$doctrineMongoDbOdmServiceProvider->register($container);

Silex

<?php

use DF\DoctrineMongoDb\Silex\Provider\DoctrineMongoDbProvider;
use DF\DoctrineMongoDbOdm\Silex\Provider\DoctrineMongoDbOdmProvider;
use Silex\Application;
use Silex\Provider\DoctrineServiceProvider;

$app = new Application;

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

$app->register(new DoctrineMongoDbOdmProvider, array(
    "mongodbodm.proxies_dir" => "/path/to/proxies",
    "mongodbodm.hydrator_dir" => "/path/to/hydrator",
    "mongodbodm.dm.options" => array(
        "database" => "test",
        "mappings" => array(
            // Using actual filesystem paths
            array(
                "type" => "annotation",
                "namespace" => "Foo\Entities",
                "path" => __DIR__."/src/Foo/Entities",
            ),
            array(
                "type" => "xml",
                "namespace" => "Bat\Entities",
                "path" => __DIR__."/src/Bat/Resources/mappings",
            ),
            // Using PSR-0 namespace embedded resources
            // (requires registering a PSR-0 Resource Locator
            // Service Provider)
            array(
                "type" => "annotation",
                "namespace" => "Baz\Entities",
                "resources_namespace" => "Baz\Entities",
            ),
            array(
                "type" => "xml",
                "namespace" => "Bar\Entities",
                "resources_namespace" => "Bar\Resources\mappings",
            ),
        ),
    ),
));

Cilex

<?php

use DF\DoctrineMongoDb\Cilex\Provider\DoctrineMongoDbProvider;
use DF\DoctrineMongoDbOdm\Cilex\Provider\DoctrineMongoDbOdmProvider;
use Cilex\Application;
use Cilex\Provider\DoctrineServiceProvider;

$app = new Application('My Application');

$app->register(new DoctrineMongoDbProvider, array(
    /** same as the Silex example **/
));

$app->register(new DoctrineMongoDbOdmProvider, array(
    /** same as the Silex example **/
));

配置

参数

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

    以下选项可用

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

    • database 应使用的数据库

    • mappings:映射定义数组。

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

      • type:映射驱动程序类型,可以是 annotationxmlymlsimple_xmlsimple_ymlphp 之一。
      • 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 以便它能够加载你的注解类。请参考以下常见问题解答:[为什么我的注解类找不到?](#user-content-why-arent-my-annotations-classes-being-found "为什么我的注解类找不到?")
    • 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'] = array(
         'mongo1' => array(
             'server' => 'mongodb://localhost:27017',
             'options' => array(
                 'username' => 'root',
                 'password' => 'root',
                 'db' => 'admin'
             )
         ),
         'mongo2' => array(
             'server' => 'mongodb://localhost:27018',
             'options' => array(
                 '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.generate_psr0_mapping:利用 dflydev/psr0-resource-locator-service-provider 处理命名空间资源目录映射的实体映射。

    示例用法

    <?php
    $app['mongodbodm.dms.config'] = $app->share($app->extend('mongodbodm.dms.config', function ($config, $app) {
        $mapping = $app['mongodbodm.generate_psr0_mapping'](array(
            'Foo\Resources\mappings' => 'Foo\Entities',
            'Bar\Resources\mappings' => 'Bar\Entities',
        ));
    
        $chain = $app['mongodbodm.mapping_driver_chain.locator']();
    
        foreach ($mapping as $directory => $namespace) {
            $driver = new XmlDriver($directory);
            $chain->addDriver($driver, $namespace);
        }
    
        return $config;
    }));

服务

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

常见问题解答

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

use_simple_annotation_reader 为文档设置为 False 时,需要将项目的自动加载程序添加到 AnnotationRegistry 中。

示例

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

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

许可证

MIT,请参阅 LICENSE。

非原创

本项目基于 @dflydevdflydev/dflydev-doctrine-orm-service-provider 项目上所做的艰巨工作。

版权