Home

Awesome

FileSystem Repository

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

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.


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:

Filtering

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

Methods:

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

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:

Page object

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

Methods:

Sorting

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

Methods:

Ordering

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

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

Methods:


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.