coderxlsn/phly-mongo

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

1.1.4 2016-04-26 13:13 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:04:07 UTC


README

Build Status

PhlyMongo 为 ZF2 中的 Mongo 使用提供了以下帮助

  • 填充 Mongo 结果集
  • Mongo 分页器适配器
  • 用于填充结果集的 Mongo 分页器适配器
  • 为 Mongo、MongoDB 和 MongoCollection 类提供可配置的服务工厂

安装

最简单的方法是将以下内容添加到 composer.json

{
    "minimum-stability": "dev",
    "require": {
        "coderxlsn/phly-mongo": "~1.0-dev"
    }
}

然后运行

php composer.phar install

或者,使用 git 将其作为子模块安装

git submodule add git://github.com/coderxlsn/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);
}