This Silex service provider provides Doctrine MongoDB ODM service in your Silex Application.
This provider has been developed by Justin Hileman and Florian Klein
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.
Enjoy
Add in your composer.json
the require entry for this library.
{
"require": {
"neutron/mongo-odm-silex-provider": "*"
}
}
and run composer install
(or update
) to download all files, resolve dependencies and update the autoloading.php file.
You can register MongoDB ODM Provider using:
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
}),
));
The configuration params listed above can be omitted if you use the default values.
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
You need to register the differents documents namespace to make possible use it with Doctrine ODM, eg:
$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.
Add information in 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();
// ...
});
Retrieve information from MongoDB:
$app->get('/demo/list', function () use ($app) {
// ...
$demos = $app['doctrine.odm.mongodb.dm']
->getRepository('Acme\\Document\\Demo')
->findAll();
// ...
});
if you have defined an alias, you can use it:
$app['doctrine.odm.mongodb.dm']->getRepository('docs:Demo');
Sometime can be usefull have console to manage your Doctrine ODM. You can configure your console to use it with:
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(),
));
Released under the MIT license