nilportugues/filesystem-repository

文件系统仓库实现

3.0.0 2016-08-05 12:35 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:36:48 UTC


README

PHP7 Tested Build Status Scrutinizer Code Quality SensioLabsInsight Latest Stable Version Total Downloads License Donate

FileSystem Repository使用nilportugues/repository作为基础。

FileSystem Repository允许您轻松获取、分页和操作数据,而不需要增加开销和遵循良好实践。

目录

特性

  • 从一开始就是仓库模式。
  • 所有操作从一开始就可用
    • 使用PHP对象搜索仓库
    • 使用过滤对象进行过滤。
    • 使用字段对象获取特定字段。
    • 使用页面和分页对象解决分页问题。
  • 想要更改持久层?提供的仓库替代方案是
  • 需要缓存层?易于添加!
    • 需要从Composer安装Repository Cache包以添加所有操作的持久性缓存。

安装

使用Composer安装包

$ composer require nilportugues/filesystem-repository

使用

<?php
use NilPortugues\Foundation\Infrastructure\Model\Repository\FileSystem\Drivers\NativeFileSystem;
use NilPortugues\Foundation\Infrastructure\Model\Repository\FileSystem\FileSystemRepository;

//-------------------------------------------------------------------
// Setting up the repository directory and how it will be access:
//-------------------------------------------------------------------
$baseDir = __DIR__.'/data/colors';
$fileSystem = new NativeFileSystem($baseDir);
$fileRepository = new FileSystemRepository($fileSystem);

//-------------------------------------------------------------------
// Create sample data
//-------------------------------------------------------------------
$red = new Color('Red', 1);
$blue = new Color('Blue', 2)
$fileRepository->addAll([$red, $blue]);

//-------------------------------------------------------------------
// Now let's try filtering by id
//-------------------------------------------------------------------
$filter = new Filter();
$filter->must()->equal('id', 1); //id is a Color property.

print_r($fileRepository->findBy($filter));

//-------------------------------------------------------------------
// Now let's try filtering by contaning 'e' in the name and sort them.
//-------------------------------------------------------------------
$filter = new Filter();
$filter->must()->contain('name', 'e'); //name is a Color property.

$sort = new Sort();
$sort->setOrderFor('name', new Order('DESC'));

print_r($fileRepository->findBy($filter, $sort)); // This will return both values.

//-------------------------------------------------------------------
//Lets remove all colors from the repository
//-------------------------------------------------------------------
$fileRepository->removeAll();

仓库

仓库类实现了所有与数据交互和过滤所需的方法。

  • public function add($value)
  • public function addAll(array $values)
  • public function remove(Identity $id)
  • public function removeAll(Filter $filter = null)
  • public function transactional(callable $transaction)
  • public function find(Identity $id, Fields $fields = null)
  • public function findBy(Filter $filter = null, Sort $sort = null, Fields $fields = null)
  • public function findByDistinct(Fields $distinctFields, Filter $filter = null, Sort $sort = null, Fields $fields = null)
  • public function findAll(Pageable $pageable = null)
  • public function count(Filter $filter = null)
  • public function exists(Identity $id)

数据操作

所有数据都可以通过字段名称、使用过滤器、应用排序和分页来提取,能够应用字段、过滤器和排序标准。

字段

通过字段选择将使填充失败。目前不支持部分对象填充。

类: NilPortugues\Foundation\Domain\Model\Repository\Fields

方法

  • public function __construct(array $fields = [])
  • public function add($field)
  • public function get()

过滤

类: NilPortugues\Foundation\Domain\Model\Repository\Filter

方法

  • public function filters()
  • public function must()
  • public function mustNot()
  • public function should()
  • public function clear()

对于 must()mustNot()should(),可用的方法有

  • public function notStartsWith($filterName, $value)
  • public function notEndsWith($filterName, $value)
  • public function notEmpty($filterName)
  • public function empty($filterName)
  • public function startsWith($filterName, $value)
  • public function endsWith($filterName, $value)
  • public function equal($filterName, $value)
  • public function notEqual($filterName, $value)
  • public function includeGroup($filterName, array $value)
  • public function notIncludeGroup($filterName, array $value)
  • public function range($filterName, $firstValue, $secondValue)
  • public function notRange($filterName, $firstValue, $secondValue)
  • public function notContain($filterName, $value)
  • 公共函数 contain($filterName, $value)
  • 公共函数 beGreaterThanOrEqual($filterName, $value)
  • 公共函数 beGreaterThan($filterName, $value)
  • 公共函数 beLessThanOrEqual($filterName, $value)
  • 公共函数 beLessThan($filterName, $value)
  • public function clear()
  • public function get()
  • 公共函数 hasEmpty($filterName)

分页

分页处理由两个对象完成,一个是Pageable,它负责分页,另一个是Page,它实际上包含了页数据,如页码、总页数和数据。

分页的

类: NilPortugues\Foundation\Domain\Model\Repository\Pageable

方法

  • 公共函数 __construct($pageNumber, $pageSize, Sort $sort = null, Filter $filter = null, Fields $fields = null)
  • 公共函数 offset()
  • 公共函数 pageNumber()
  • 公共函数 sortings()
  • 公共函数 next()
  • 公共函数 pageSize()
  • 公共函数 previousOrFirst()
  • 公共函数 hasPrevious()
  • 公共函数 first()
  • public function filters()
  • 公共函数 fields()

分页对象

类: NilPortugues\Foundation\Domain\Model\Repository\Page

方法

  • 公共函数 __construct(array $elements, $totalElements, $pageNumber, $totalPages, Sort $sort = null, Filter $filter = null, Fields $fields = null)
  • 公共函数 content()
  • 公共函数 hasPrevious()
  • 公共函数 isFirst()
  • 公共函数 isLast()
  • 公共函数 hasNext()
  • 公共函数 pageSize()
  • 公共函数 pageNumber()
  • 公共函数 totalPages()
  • 公共函数 nextPageable()
  • 公共函数 sortings()
  • public function filters()
  • 公共函数 fields()
  • 公共函数 previousPageable()
  • 公共函数 totalElements()
  • 公共函数 map(callable $converter)

排序

类: NilPortugues\Foundation\Domain\Model\Repository\Sort

方法

  • 公共函数 __construct(array $properties = [], Order $order = null)
  • 公共函数 andSort(SortInterface $sort)
  • 公共函数 orders()
  • 公共函数 equals(SortInterface $sort)
  • 公共函数 orderFor($propertyName)
  • 公共函数 setOrderFor($propertyName, Order $order)
  • 公共函数 property($propertyName)

排序

有时您需要按多个字段排序,这就是Order发挥作用的地方。

: NilPortugues\Foundation\Domain\Model\Repository\Order

方法

  • 公共函数 __construct($direction)
  • 公共函数 isDescending()
  • 公共函数 isAscending()
  • 公共函数 __toString()
  • 公共函数 equals($object)
  • 公共函数 direction()

质量

要在命令行运行PHPUnit测试,请进入测试目录并执行phpunit。

此库试图遵守PSR-1PSR-2PSR-4

如果您发现遵守上的疏忽,请通过Pull Request发送补丁。

贡献

欢迎为该包做出贡献!

支持

使用以下方式之一与我联系

作者

许可证

代码库采用MIT许可证