承接 nilportugues/filesystem-repository 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

nilportugues/filesystem-repository

Composer 安装命令:

composer require nilportugues/filesystem-repository

包简介

FileSystem Repository implementation

README 文档

README

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

FileSystem Repository using nilportugues/repository as foundation.

FileSystem Repository allows you to fetch, paginate and operate with data easily without adding overhead and following good practices.

Table of Contents

Features

  • Repository pattern right from the start.
  • All operations available from the beginning:
    • Search the repository using PHP objects
    • Filtering is available using the Filter object.
    • Fetching certaing fields is available using the Fields Object.
    • Pagination is solved available using the Page and Pageable objects.
  • Want to change persistence layer? Provided repository alternatives are:
  • Caching layer required? Easily to add!
    • Require the Repository Cache package from Composer to add consistent caching to all operations.

Installation

Use Composer to install the package:

$ composer require nilportugues/filesystem-repository

Usage

<?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();

Repository

The repository class implements all the methods required to interact and filter your data.

  • 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)

Data Operations

All data can be extracted by fields name, using filters, applying ordering and pages, capable of applying fields, filters and ordering criteria.

Fields

Selecting by field will make hydratation fail. Currently partial object hydratation is not supported.

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

Methods:

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

Filtering

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

Methods:

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

For must(), mustNot() and should(), the methods available are:

  • 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)
  • public function contain($filterName, $value)
  • public function beGreaterThanOrEqual($filterName, $value)
  • public function beGreaterThan($filterName, $value)
  • public function beLessThanOrEqual($filterName, $value)
  • public function beLessThan($filterName, $value)
  • public function clear()
  • public function get()
  • public function hasEmpty($filterName)

Pagination

Pagination is handled by two objects, Pageable that has the requirements to paginate, and Page that it's actually the page with the page data, such as page number, total number, and the data.

Pageable

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

Methods:

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

Page object

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

Methods:

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

Sorting

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

Methods:

  • public function __construct(array $properties = [], Order $order = null)
  • public function andSort(SortInterface $sort)
  • public function orders()
  • public function equals(SortInterface $sort)
  • public function orderFor($propertyName)
  • public function setOrderFor($propertyName, Order $order)
  • public function property($propertyName)

Ordering

Sometimes you want to sort by multiple fields, this is where Order comes in play.

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

Methods:

  • public function __construct($direction)
  • public function isDescending()
  • public function isAscending()
  • public function __toString()
  • public function equals($object)
  • public function direction()

Quality

To run the PHPUnit tests at the command line, go to the tests directory and issue phpunit.

This library attempts to comply with PSR-1, PSR-2, PSR-4.

If you notice compliance oversights, please send a patch via Pull Request.

Contribute

Contributions to the package are always welcome!

Support

Get in touch with me using one of the following means:

Authors

License

The code base is licensed under the MIT license.

nilportugues/filesystem-repository 适用场景与选型建议

nilportugues/filesystem-repository 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 156 次下载、GitHub Stars 达 4, 最近一次更新时间为 2016 年 02 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「file」 「cache」 「repository」 「pagination」 「ddd」 「adapters」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 nilportugues/filesystem-repository 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 nilportugues/filesystem-repository 我们能提供哪些服务?
定制开发 / 二次开发

基于 nilportugues/filesystem-repository 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 156
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 4
  • 点击次数: 10
  • 依赖项目数: 0
  • 推荐数: 2

GitHub 信息

  • Stars: 4
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-02-07