neutron/mongo-odm-silex-provider

MongoODM Silex 服务提供者

0.1.3 2014-04-18 08:37 UTC

This package is auto-updated.

Last update: 2024-08-25 05:49:49 UTC


README

Build Status

Silex服务提供者可在您的Silex应用程序中提供Doctrine MongoDB ODM服务。

此提供者由Justin HilemanFlorian Klein开发。

这两个项目似乎都已经不再维护,因此这里提供了一个维护版本,兼容Doctrine MongoDB ODM >= 1.0.0-beta4。

享受吧

用法

Composer

在您的composer.json中添加此库的require条目。

{
    "require": {
        "neutron/mongo-odm-silex-provider": "*"
    }
}

然后运行composer install(或update)以下载所有文件,解决依赖并更新autoloading.php文件。

注册

您可以使用以下方式注册MongoDB ODM提供者:

use Neutron\Silex\Provider\MongoDBODMServiceProvider;

// ...

$app->register(new MongoDBODMServiceProvider(), array(
    'doctrine.odm.mongodb.connection_options' => array(
        'database' => 'MONGODB_DB',

        // connection string:
        // mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
        'host'     => 'MONGODB_SERVER',

        // connection options as described here:
        // https://php.ac.cn/manual/en/mongoclient.construct.php
        'options'  => array('fsync' => false)
    ),
    'doctrine.odm.mongodb.documents'               => array(),
    'doctrine.odm.mongodb.proxies_dir'             => 'cache/doctrine/odm/mongodb/Proxy',
    'doctrine.odm.mongodb.proxies_namespace'       => 'DoctrineMongoDBProxy',
    'doctrine.odm.mongodb.auto_generate_proxies'   => true,
    'doctrine.odm.mongodb.hydrators_dir'           => 'cache/doctrine/odm/mongodb/Hydrator',
    'doctrine.odm.mongodb.hydrators_namespace'     => 'DoctrineMongoDBHydrator',
    'doctrine.odm.mongodb.auto_generate_hydrators' => true,
    'doctrine.odm.mongodb.metadata_cache'          => new \Doctrine\Common\Cache\ArrayCache(),
    'doctrine.odm.mongodb.logger_callable'         => $app->protect(function($query) {
                                                          // log your query
                                                      }),
));

配置

如果您使用默认值,则可以省略上述配置参数。

  • doctrine.odm.mongodb.documents:文档管理注册。此选项将在下一段中解释。
  • doctrine.odm.mongodb.proxies_dir:Doctrine生成的代理类的目录。
  • doctrine.odm.mongodb.proxies_namespace:Doctrine生成的代理类的命名空间。
  • doctrine.odm.mongodb.hydrators_dir:Doctrine生成的 hydrator 类的目录。
  • doctrine.odm.mongodb.hydrators_namespace:Doctrine生成的 hydrator 类的命名空间。
  • doctrine.odm.mongodb.metadata_cache:用作缓存系统的类实例。您可以将它更改为\Doctrine\Common\Cache\ApcCache()以使用APC缓存系统。
  • doctrine.odm.mongodb.logger_callable:用于日志的可调用对象,必须使用 $app->protect() 包装函数,以防止它们被Pimple解释。

文档注册

您需要注册不同的文档命名空间,以便使用Doctrine ODM,例如

$app->register(new MongoDBODMServiceProvider(), array(
    // ...
    'doctrine.odm.mongodb.documents' => array(
        0 => array(
            'type' => 'annotation',
            'path' => array(
                'src/Acme/Entities',
            ),
            'namespace' => 'Acme/Entities',
            'alias'     => 'docs',
        ),
    ),
    // ...
));

您可以添加多个文件夹/命名空间。

用法

在MongoDB中添加信息

// Define routing
$app->post('/demo/add', function () use ($app) {
  // ...
  $demo = new \Acme\Document\Demo();
  $demo->setTitle('Test');
  $demo->setBody('This is a demo document.');

  $app['doctrine.odm.mongodb.dm']->persist($demo);
  $app['doctrine.odm.mongodb.dm']->flush();

  // ...
});

从MongoDB中检索信息

$app->get('/demo/list', function () use ($app) {
  // ...
  $demos = $app['doctrine.odm.mongodb.dm']
    ->getRepository('Acme\\Document\\Demo')
    ->findAll();

  // ...
});

如果您已定义别名,则可以使用它

$app['doctrine.odm.mongodb.dm']->getRepository('docs:Demo');

创建控制台

有时使用控制台管理Doctrine ODM非常有用。您可以通过以下方式配置您的控制台以使用它:

use Symfony\Component\Console\Application;
// .. other class to import
use Doctrine\ODM\MongoDB\Tools\Console\Helper\DocumentManagerHelper;

$console = new Application('Acme Application', '1.0');

// Other commands

// This make possibile to re-use default Doctrine console command
$dm = new DocumentManagerHelper($app['doctrine.odm.mongodb.dm']);
$console->getHelperSet()->set($dm, 'dm');

// Add Doctrine ODM commands
$console->addCommands(array(
    new Doctrine\ODM\MongoDB\Tools\Console\Command\GenerateDocumentsCommand(),
    new Doctrine\ODM\MongoDB\Tools\Console\Command\GenerateHydratorsCommand(),
    new Doctrine\ODM\MongoDB\Tools\Console\Command\GenerateProxiesCommand(),
    new Doctrine\ODM\MongoDB\Tools\Console\Command\GenerateRepositoriesCommand(),
    new Doctrine\ODM\MongoDB\Tools\Console\Command\QueryCommand(),
    new Doctrine\ODM\MongoDB\Tools\Console\Command\ClearCache\MetadataCommand(),
));

许可证

在MIT许可证下发布