MongoDB ODM Silex Service Provider
, (*1)
This Silex service provider provides Doctrine
MongoDB ODM
service in your Silex Application., (*2)
This provider has been developed by Justin Hileman
and Florian Klein, (*3)
It seems that both of these projects are not maintained anymore, so here comes
the maintained version, compatible with Doctrine MongoDB ODM >= 1.0.0-beta4., (*4)
Enjoy, (*5)
Usage
Composer
Add in your composer.json
the require entry for this library., (*6)
{
"require": {
"neutron/mongo-odm-silex-provider": "*"
}
}
and run composer install
(or update
) to download all files, resolve dependencies and update the autoloading.php file., (*7)
Registering
You can register MongoDB ODM Provider using:, (*8)
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:
// http://www.php.net/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
}),
));
Configuration
The configuration params listed above can be omitted if you use the default values., (*9)
-
doctrine.odm.mongodb.documents
: document management registration. This option will be explaned in the next praragraph.
-
doctrine.odm.mongodb.proxies_dir
: directory for proxy classes generated by Doctrine.
-
doctrine.odm.mongodb.proxies_namespace
: namespace for proxy classes generated by Doctrine.
-
doctrine.odm.mongodb.hydrators_dir
: directory for hydrators classes generated by Doctrine.
-
doctrine.odm.mongodb.hydrators_namespace
: namespace for hydrators classes generated by Doctrine.
-
doctrine.odm.mongodb.metadata_cache
: instace of class to use as caching system. Maybe you can change to \Doctrine\Common\Cache\ApcCache()
to use APC caching system.
-
doctrine.odm.mongodb.logger_callable
: Callable used for logging, must wrap functions using $app->protect() to prevent from them being interpreted by Pimple
Document registration
You need to register the differents documents namespace to make possible use it with Doctrine ODM, eg:, (*10)
$app->register(new MongoDBODMServiceProvider(), array(
// ...
'doctrine.odm.mongodb.documents' => array(
0 => array(
'type' => 'annotation',
'path' => array(
'src/Acme/Entities',
),
'namespace' => 'Acme/Entities',
'alias' => 'docs',
),
),
// ...
));
you can add multiple folders/namespaces., (*11)
Usage
Add information in MongoDB:, (*12)
// 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();
// ...
});
Retrieve information from MongoDB:, (*13)
``` php
$app->get('/demo/list', function () use ($app) {
// ...
$demos = $app['doctrine.odm.mongodb.dm']
->getRepository('Acme\Document\Demo')
->findAll();, (*14)
// ...
});, (*15)
if you have defined an alias, you can use it:
```php
$app['doctrine.odm.mongodb.dm']->getRepository('docs:Demo');
Creating console
Sometime can be usefull have console to manage your Doctrine ODM. You can configure your console to use it with:, (*16)
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(),
));
License
Released under the MIT license, (*17)