juliangut/slim-doctrine

Slim-Doctrine 管理器集成

2.3 2017-10-08 11:27 UTC

This package is auto-updated.

Last update: 2024-09-03 00:57:54 UTC


README

PHP version Latest Version License

Build Status Style Check Code Quality Code Coverage

Total Downloads Monthly Downloads

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\Applicationcli-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 文件