phly / phly-mongo
该软件包最新版本(1.1.0)没有提供许可证信息。
ZF2 模块,提供围绕 MongoDB 的服务和分页器
1.1.0
2015-07-20 13:54 UTC
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-09-11 13:50:11 UTC
README
PhlyMongo 提供以下功能以帮助在 ZF2 中使用 Mongo
- 填充 Mongo 结果集
- Mongo 分页器适配器
- 用于填充结果集的 Mongo 分页器适配器
- 可配置的 Mongo、MongoDB 和 MongoCollection 类的服务工厂
安装
最简单的方法是将以下内容添加到 composer.json
{ "minimum-stability": "dev", "require": { "phly/phly-mongo": "~1.0-dev" } }
然后运行
php composer.phar install
或者,使用 git 将其作为子模块安装
git submodule add git://github.com/phly/PhlyMongo vendor/PhlyMongo
使用方法
服务
为了保持最大的灵活性,服务工厂需要您向构造函数传递信息。因此,您通常应该通过您的 Module.php
定义来配置和设置工厂。
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'), )); } }
如果您希望服务器、服务器选项、数据库、集合或任何服务名称是动态的,请考虑将工厂包装在闭包中,并传递配置。
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 // )); } }
但是,如果您需要这样做,您也可以轻松地使用原生 Mongo 类。
填充游标
填充游标作为一种将结果集映射到对象的方法非常有用。
将 MongoCursor
实例传递给构造函数,以及一个填充器和原型对象,您就设置好了。
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); }
分页器适配器
分页器适配器允许您使用 MongoCursor
与 Zend\Paginator
。
将 MongoCursor
传递给构造函数,然后将适配器传递给分页器实例。
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 }
填充分页器适配器
这基于分页器适配器,并简单地修改了它在构造函数中接受特定的 PhlyMongo\HydratingMongoCursor
,允许您在迭代过程中返回特定类型的对象。
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); }