phly / phly-mongo
ZF2 Module providing services and paginators surrounding MongoDB
Installs: 45 742
Dependents: 2
Suggesters: 1
Security: 0
Stars: 27
Watchers: 9
Forks: 17
Open Issues: 0
Requires
- php: >=5.5
- ext-mongo: *
- zendframework/zend-i18n: ~2.0
- zendframework/zend-paginator: ~2.0
- zendframework/zend-servicemanager: ~2.0
- zendframework/zend-stdlib: ~2.0
Requires (Dev)
- phpunit/phpunit: ~4.7
- squizlabs/php_codesniffer: ^2.3.1
- zendframework/zend-form: ~2.0
- zendframework/zend-log: ~2.0
- zendframework/zend-modulemanager: ~2.0
- zendframework/zend-mvc: ~2.0
- zendframework/zend-serializer: ~2.0
- zendframework/zend-view: ~2.0
This package is auto-updated.
Last update: 2024-12-11 14:26:39 UTC
README
PhlyMongo provides the following to assist with Mongo usage in ZF2:
- Hydrating Mongo resultset
- Mongo paginator adapter
- Mongo paginator adapter for hydrating resultsets
- Configurable service factories for the Mongo, MongoDB, and MongoCollection classes
Installation
Simplest is to add the following to composer.json
:
{ "minimum-stability": "dev", "require": { "phly/phly-mongo": "~1.0-dev" } }
And then run:
php composer.phar install
Alternately, use git to install this as a submodule:
git submodule add git://github.com/phly/PhlyMongo vendor/PhlyMongo
Usage
Services
In order to remain as flexible as possible, the service factories require that
you pass information to the constructors. As such, you should typically
configure and setup the factories via your Module.php
definition:
namespace My; use PhlyMongo\MongoCollectionFactory; use PhlyMongo\MongoDbFactory; class Module { public function getServiceConfig() { return array('factories' => array( 'My\Mongo' => 'PhlyMongo\MongoConnectionFactory', 'My\MongoDB' => new MongoDbFactory('my-site', 'My\Mongo'), 'My\MongoCollection' => new MongoCollectionFactory('some-stuff', 'My\MongoDB'), )); } }
If you want the server, server options, database, collection, or any service names to be dynamic, consider wrapping the factories in closures, and passing in configuration:
namespace My; use PhlyMongo\MongoCollectionFactory; use PhlyMongo\MongoConnectionFactory; use PhlyMongo\MongoDbFactory; class Module { public function getServiceConfig() { return array('factories' => array( 'My\Mongo' => function ($services) { $config = $services->get('config'); $config = $config['my']['mongo']; $factory = new MongoConnectionFactory($config['server'], $config['server_options']); return $factory->createService($services); }, // and so on // )); } }
However, if you need to do this, you might just as easily use the native Mongo classes.
Hydrating Cursor
The hydrating cursor is useful as a way to map result sets to objects.
Pass a MongoCursor
instance to the constructor, along with a hydrator and a
prototype object, and you're set:
use PhlyMongo\HydratingMongoCursor; use Zend\Stdlib\Hydrator\ObjectProperty; class Status { public $_id; public $name; public $email; public $status; } $resultset = new HydratingMongoCursor( $collection->find(), new ObjectProperty, new Status ); foreach ($resultset as $status) { printf('%s <%s>: %s', $status->name, $status->email, $status->status); }
Paginator Adapter
The paginator adapter allows you to use a MongoCursor
with Zend\Paginator
.
Pass a MongoCursor
to the constructor, and then pass the adapter to the
paginator instance.
use PhlyMongo\PaginatorAdapter as MongoPaginatorAdapter; use Zend\Paginator\Paginator; $adapter = new MongoPaginatorAdapter($collection->find()); $paginator = new Paginator($adapter); $paginator->setCurrentPageNumber(5); $paginator->setItemCountPerPage(10); foreach ($paginator as $item) { // only receiving up to 10 items, starting at offset 50 }
Hydrating Paginator Adapter
This builds on the paginator adapter, and simply alters it to accept
specifically a PhlyMongo\HydratingMongoCursor
in the constructor, allowing
you to return objects of a specific type during iteration.
use PhlyMongo\HydratingMongoCursor; use PhlyMongo\HydratingPaginatorAdapter as MongoPaginatorAdapter; use Zend\Paginator\Paginator; $adapter = new MongoPaginatorAdapter(new HydratingMongoCursor( $collection->find(), new ObjectProperty, new Status )); $paginator = new Paginator($adapter); $paginator->setCurrentPageNumber(5); $paginator->setItemCountPerPage(10); foreach ($paginator as $item) { // only receiving up to 10 items, starting at offset 50 printf('%s <%s>: %s', $status->name, $status->email, $status->status); }