phly/phly-mongo

该软件包最新版本(1.1.0)没有提供许可证信息。

ZF2 模块,提供围绕 MongoDB 的服务和分页器

1.1.0 2015-07-20 13:54 UTC

This package is auto-updated.

Last update: 2024-09-11 13:50:11 UTC


README

Build Status

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);
}

分页器适配器

分页器适配器允许您使用 MongoCursorZend\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);
}