juliangut / slim-doctrine
Slim-Doctrine 管理器集成
Requires
- php: ^5.6|^7.0
- juliangut/doctrine-manager-builder: ^1.7
- slim/slim: ^3.0
Requires (Dev)
- brainmaestro/composer-git-hooks: ^2.1
- doctrine/couchdb-odm: dev-master
- doctrine/mongodb-odm: ^1.1
- doctrine/orm: ^2.4
- friendsofphp/php-cs-fixer: ^1.0
- phpmd/phpmd: ^2.0
- phpunit/phpunit: ^4.5|^5.0
- phpunit/phpunit-mock-objects: ^3.2
- sebastian/phpcpd: ^2.0
- squizlabs/php_codesniffer: ^2.0
Suggests
- doctrine/couchdb-odm: dev-master
- doctrine/mongodb-odm: ^1.1
- doctrine/orm: ^2.4
README
Slim 与 Doctrine 管理器的集成
简单易用的 Slim 框架集成 Doctrine 的实体管理器、MongoDB 文档管理器和 CouchDB 文档管理器。
重要提示
slim-doctrine 的最新版本仅关注 Slim 框架与 Doctrine 的集成,因此无法作为独立的管理器构建器使用。
同样功能可以通过使用 juliangut/doctrine-manager-builder 实现,它不受 Slim 框架的限制。
安装
最佳安装方式是使用 Composer
composer require juliangut/slim-doctrine
然后包含自动加载文件
require_once './vendor/autoload.php';
配置
每种管理器都有自己的配置存储在设置数组的键中
ManagerBuilder::DEFAULT_RELATIONAL_MANAGER_KEY
("entity_manager") 用于ORM
ManagerBuilder::DEFAULT_MONGODB_MANAGER_KEY
("mongodb_document_manager") 用于MongoDB ODM
ManagerBuilder::DEFAULT_COUCHDB_MANAGER_KEY
("couchdb_document_manager") 用于CouchDB ODM
[ ManagerBuilder::DEFAULT_RELATIONAL_MANAGER_KEY => [ 'manager1_name' => <relational_manager_builder_configuration>, 'manager2_name' => <relational_manager_builder_configuration>, ... ], ManagerBuilder::DEFAULT_MONGODB_MANAGER_KEY => [ 'manager3_name' => <mongodb_manager_builder_configuration>, 'manager4_name' => <mongodb_manager_builder_configuration>, ... ], ManagerBuilder::DEFAULT_COUCHDB_MANAGER_KEY => [ 'manager5_name' => <couchdb_manager_builder_configuration>, 'manager6_name' => <couchdb_manager_builder_configuration>, ... ], ]
如果未提供管理器名称,则将使用默认名称
ManagerBuilder::DEFAULT_RELATIONAL_MANAGER_NAME
("entityManager") 用于ORM
ManagerBuilder::DEFAULT_MONGODB_MANAGER_NAME
("mongoDocumentManager") 用于MongoDB ODM
ManagerBuilder::DEFAULT_COUCHDB_MANAGER_NAME
("couchDocumentManager") 用于CouchDB ODM
选项
可以通过向构造函数提供选项数组来修改 ManagerBuilder 的默认键和名称
$options = [ ManagerBuilder::RELATIONAL_MANAGER_KEY => 'entity_manager', ManagerBuilder::MONGODB_MANAGER_KEY => 'mongodb_document_manager', ManagerBuilder::COUCHDB_MANAGER_KEY => 'couchdb_document_manager', ManagerBuilder::RELATIONAL_MANAGER_NAME => 'entityManager', ManagerBuilder::MONGODB_MANAGER_NAME => 'mongoDocumentManager', ManagerBuilder::COUCHDB_MANAGER_NAME => 'couchDocumentManager', ]; $managerBuilder = new ManagerBuilder($options);
管理器构建器
为了配置不同的 Doctrine 管理器构建器,请访问 juliangut/doctrine-manager-builder,该构建器用于此包中。
使用方法
将管理器注册到 DI 容器中,就像注册任何其他服务一样。
use Jgut\Slim\Doctrine\ManagerBuilder; use Slim\App; // Loaded from a file $settings = [ 'my_custom_key' => [ 'annotation_autoloaders' => ['class_exists'], 'connection' => [ 'driver' => 'pdo_sqlite', 'memory' => true, ], 'metadata_mapping' => [ [ 'type' => ManagerBuilder::METADATA_MAPPING_ANNOTATION, 'path' => 'path/to/annotation/mappings', ], ], ], ]; $managerBuilder = new ManagerBuilder([ManagerBuilder::RELATIONAL_MANAGER_KEY => 'my_custom_key']); $managerBuilder->loadSettings($settings); // Create Slim app and fetch DI Container $app = new App(); $container = $app->getContainer(); // Register every manager in the container foreach ($managerBuilder->getManagers() as $name => $manager) { $container[$name] = $manager; } // Use managers $app->get('/', function () { $this->entityManager->persist(new \Entity); $this->entityManager->flush(); });
在 DI 容器中注册管理器构建器以委托管理器创建。
use Jgut\Slim\Doctrine\ManagerBuilder; use Interop\Container\ContainerInterface; use Slim\App; // Probably loaded from a file... $settings = [ 'settings.doctrineManagers' => [ ManagerBuilder::DEFAULT_RELATIONAL_MANAGER_KEY => [ 'mainDocumentManager' => [ 'connection' => [ 'server' => 'mongodb://localhost:27017', ], 'metadata_mapping' => [ [ 'type' => ManagerBuilder::METADATA_MAPPING_ANNOTATION, 'path' => 'path/to/annotation/mappings', ], ], ], 'secondaryDocumentManager' => [ 'annotation_autoloaders' => ['class_exists'], 'connection' => [ 'server' => 'mongodb://localhost:27017', ], 'metadata_mapping' => [ [ 'type' => ManagerBuilder::METADATA_MAPPING_ANNOTATION, 'path' => 'path/to/annotation/mappings', ], ], ], ], ], ]; // Create Slim app and fetch DI Container $app = new App($settings); $container = $app->getContainer(); // Register manager builder fetching settings from container $container['manager_builder'] => function (ContainerInterface $container) { return (new ManagerBuilder())->loadSettings($container->get('settings.doctrineManagers')); }; // Register managers by pulling them from the builder $container['mainDocumentManager'] => function (ContainerInterface $container) { return $container->get('manager_builder')->getManager('mainDocumentManager'); }; $container['secondaryDocumentManager'] => function (ContainerInterface $container) { return $container->get('manager_builder')->getManager('secondaryDocumentManager'); }; // Use managers $app->get('/', function () { $this->mainDocumentManager->persist(new \Document); $this->mainDocumentManager->flush(); });
CLI 应用程序构建器
doctrine-manager
是一个 CLI 工具,与该包一起安装。它提供了与 Doctrine ORM 的 doctrine
CLI 工具相同的功能,但不需要安装 ORM。此外,doctrine-manager
允许您配置多个管理器,通过在管理器名称前加前缀来实现。
使用 doctrine-manager
的方式与 doctrine
相同,通过创建一个返回 Symfony\Component\Console\Application
的 cli-config.php
文件。
require __DIR__ . '/vendor/autoload.php'; use Jgut\Slim\Doctrine\ManagerBuilder; $settings = require 'configurations.php'; $managerBuilder = (new ManagerBuilder())->loadSettings($settings); return $managerBuilder->getCLIApplication();
贡献
发现了错误或有功能请求? 请创建一个新问题。在创建之前查看现有问题。
请参阅 CONTRIBUTING.md 文件
贡献者
许可证
有关许可证条款的副本,请参阅包含在源代码中的 LICENSE 文件