saxulum / saxulum-doctrine-mongodb-odm-provider
Saxulum Doctrine MongoDB ODM Provider
Requires
- php: ~7.0|~5.6
- alcaeus/mongo-php-adapter: ^1.1.3
- doctrine/mongodb-odm: ~1.0
- pimple/pimple: >=2.1,<4
- saxulum/saxulum-doctrine-mongodb-provider: ~2.0
Requires (Dev)
- phpunit/phpunit: ~5.7
Suggests
Provides
- ext-mongo: 1.6.14
README
与 plain silex-php 兼容
为 Pimple 应用程序提供 Doctrine MongoDB ODM 文档管理器作为服务。
特性
- 默认文档管理器可以绑定到任何数据库连接
- 可以定义多个文档管理器
- 允许服务提供者注册自己的映射机制
要求
- PHP 5.3+
- Doctrine MongoDB ODM ~1.0
安装
通过Composer以saxulum/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: 映射驱动程序类型,可以是
annotation
、xml
、yml
、simple_xml
、simple_yml
、php
或class_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: 数组的键表示实体类名,值表示实体类的映射
- type: 映射驱动程序类型,可以是
-
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
。
- $mappingDriver: 要添加的映射驱动程序,实例
-
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_reader 为 False
时,需要将项目的自动加载器添加到 AnnotationRegistry
中。
示例
<?php $loader = require __DIR__ . '/../vendor/autoload.php'; \Doctrine\Common\Annotations\AnnotationRegistry::registerLoader([$loader, 'loadClass']);
许可证
MIT,见 LICENSE 文件。
社区
如果您有任何问题或想要提供帮助,请加入 irc.freenode.net 上的 #silex-php 频道。
非原创
该项目大量基于 @dflydev 在 dflydev/dflydev-doctrine-orm-service-provider 项目上的工作。
版权
- 多米尼克·佐格 [email protected]
- 博伊·西蒙森 [email protected] (Doctrine ORM 服务提供者)