2017 © Pedro Peláez
 

library phalcon-repositories

A library which simplifies the use of the Repository pattern in Phalcon.

image

michele-angioni/phalcon-repositories

A library which simplifies the use of the Repository pattern in Phalcon.

  • Wednesday, July 4, 2018
  • by Michele
  • Repository
  • 3 Watchers
  • 9 Stars
  • 442 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 5 Forks
  • 0 Open issues
  • 12 Versions
  • 51 % Grown

The README.md

Phalcon Repositories

License Latest Stable Version Latest Unstable Version Build Status, (*1)

Introduction

Phalcon Repositories lets you easily build repositories for your Phalcon models, for both SQL and Mongo drivers., (*2)

PHP 7.1+ and Phalcon 3.2+ are required., (*3)

Installation

Phalcon Repositories can be installed through Composer, just run composer require michele-angioni/phalcon-repositories., (*4)

Usage with SQL Drivers

The abstract class AbstractRepository consists of a model wrapper with numerous useful queries to be performed over the Phalcon models. This way implementing the repository pattern becomes straightforward., (*5)

As an example let's say we have a MyApp\Models\Posts model., (*6)

The easiest way to create a Posts repository is to define a class as such, (*7)

<?php

namespace MyApp\Repos;

use MicheleAngioni\PhalconRepositories\AbstractRepository;
use MyApp\Models\Posts;

class PostsRepository extends AbstractRepository
{
    protected $model;

    public function __construct(Posts $model)
    {
        $this->model = $model;
    }
}

Suppose now we need the Post repository in our PostController. For example we can retrieve a Post this way, (*8)

<?php

namespace MyApp\Controllers;

use MyApp\Repos\PostsRepository as PostsRepo;
use Phalcon\Mvc\Controller;
use MyApp\Models\Posts;

class PostsController extends Controller 
{

    public function showAction($idPost)
    {
        $postsRepo = new PostsRepo(new Posts());

        $post = $postsRepo->find($idPost);

        // Use the retrieved post
    }
}

We could also bind out repository to the container through the Phalcon dependency injection. We just need to add a new postRepo service in our bootstrap file, (*9)

$di->set('postsRepo', function () {
    return new MyApp\Repos\PostsRepository(new \MyApp\Models\Posts());
});

and than use it in the controller, (*10)

<?php

namespace MyApp\Controllers;

use Phalcon\Mvc\Controller;

class PostsController extends Controller 
{

    public function showAction($idPost)
    {
        $postsRepo = $this->getDI()->getPostsRepo();

        $post = $postsRepo->find($idPost);

        // Use the retrieved Post
    }
}

Usage with MongoDB

The abstract class AbstractCollectionRepository, similary to AbstractRepository, consists of a model wrapper with numerous useful queries to be performed over the Phalcon collections. This way implementing the repository pattern becomes straightforward., (*11)

As an example let's say we have a MyApp\Models\Posts collection, (*12)

<?php

namespace MyApp\Models;

use Phalcon\Mvc\MongoCollection;

class Posts extends MongoCollection
{
    use \MicheleAngioni\PhalconRepositories\MongoFix; // Fix for Phalcon 3.1.x with PHP 7.1

    [...]
}

The easiest way to create a Posts repository is to define a class as such, (*13)

<?php namespace MyApp\Repos;

use MicheleAngioni\PhalconRepositories\AbstractCollectionRepository;
use MyApp\Models\Posts;

class PostsRepository extends AbstractCollectionRepository
{
    protected $model;

    public function __construct(Posts $model)
    {
        $this->model = $model;
    }
}

Suppose now we need the Post repository in our PostController. For example we can retrieve a Post this way, (*14)

<?php

namespace MyApp\Controllers;

use MyApp\Repos\PostsRepository as PostsRepo;
use Phalcon\Mvc\Controller;
use MyApp\Models\Posts;

class PostsController extends Controller
{

    public function showAction($idPost)
    {
        $postsRepo = new PostsRepo(new Posts());

        $post = $postsRepo->find($idPost);

        // Use the retrieved Post
    }
}

We could also bind out repository to the container through the Phalcon dependency injection. We just need to add a new postRepo service in our bootstrap file, (*15)

$di->set('postsRepo', function () {
    return new MyApp\Repos\PostsRepository(new \MyApp\Models\Posts());
});

and than use it in the controller, (*16)

<?php

namespace MyApp\Controllers;

use Phalcon\Mvc\Controller;

class PostsController extends Controller
{

    public function showAction($idPost)
    {
        $postsRepo = $this->getDI()->getPostsRepo();

        $post = $postsRepo->find($idPost);

        // Use the retrieved post
    }
}

Method list

The AbstractRepository and AbstractCollectionRepository empower automatically our repositories of the following public methods:, (*17)

  • all()
  • find($id)
  • findOrFail($id)
  • first()
  • firstOrFail()
  • firstBy(array $where = [])
  • firstOrFailBy(array $where = [])
  • getBy(array $where = [])
  • getByLimit(int $limit, array $where = [])
  • getByOrder(string $orderBy, array $where = [], string $order = 'desc', int $limit = 0)
  • getIn(string $whereInKey, array $whereIn = [], string $orderBy = null, string $order = 'desc', int $limit = 0)
  • getNotIn(string $whereNotInKey, array $whereNotIn = [], string $orderBy = null, string $order = 'desc', int $limit = 0)
  • getInAndWhereByPage(int $page = 1, int $limit = 10, string $whereInKey = null, array $whereIn = [], $where = [], $orderBy = null, string $order = 'desc')
  • getByPage(int $page = 1, int $limit = 10, array $where = [], string $orderBy = null, string $order = 'desc')
  • create(array $inputs = [])
  • updateById($id, array $inputs)
  • destroy($id)
  • destroyFirstBy(array $where)
  • count()
  • countBy(array $where = [])

The AbstractRepository contains also the methods:, (*18)

  • getByGroupBy(string $groupBy, array $where = [], bool $addCounts = false)
  • truncate()

while the AbstractCollectionRepository allows for aggregations through:, (*19)

  • getAggregate(array $match = [], array $project = [], array $group = [], int $limit = 0)

The $where parameter with SQL drivers

The $where parameter allows the use of various operators with the SQL driver, other than the equals =, even the LIKE keyword., (*20)

The following formats are supported:, (*21)

  • 'key' => 'value', (*22)

    Examples:, (*23)

    $where = ['username' => 'Richard']
    
  • 'key' => ['value', 'operator'], (*24)

    Examples:, (*25)

    $where = ['age' => [30, '=']]
    $where = ['age' => [30, '<']]
    $where = ['age' => [30, '>']]
    $where = ['username' => ['%Fey%', 'LIKE']]
    
  • ['key1%OR%key2'] => ['value', 'operator'], (*26)

    Examples:, (*27)

    `$where = ['username%OR%description' => ['%Feynman%', 'LIKE']]`
    

SQL Injection

The AbstractRepository and AbstractCollectionRepository use bind parameters for all $id and $where clauses. $inputs parameters in create and update queries are automatically escaped by Phalcon., (*28)

The security of the other parameters ($whereInKey, $whereIn, $orderBy, $order, $limit etc.) is up to you., (*29)

Testing

Install dependencies with composer install and then run vendor/bin/phpunit tests., (*30)

Contribution guidelines

Phalcon Repositories follows PSR-1, PSR-2 and PSR-4 PHP coding standards, and semantic versioning., (*31)

Pull requests are welcome., (*32)

License

Phalcon Repositories is free software distributed under the terms of the MIT license., (*33)

The Versions

04/07 2018

dev-master

9999999-dev

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

07/06 2018

v0.5.0

0.5.0.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

30/05 2018

v0.4.3

0.4.3.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

03/04 2018

v0.4.2

0.4.2.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

29/03 2018

v0.4.1

0.4.1.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

29/03 2018

v0.4.0

0.4.0.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

07/07 2017

v0.3.1

0.3.1.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

07/07 2017

v0.3

0.3.0.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

 

The Development Requires

repositories phalcon repo

23/05 2017

dev-noPHP71fix

dev-noPHP71fix

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

  • php ^7.0
  • ext-phalcon ^3.0

 

The Development Requires

repositories phalcon repo

22/05 2017

v0.2.1

0.2.1.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

  • php ^7.0
  • ext-phalcon ^3.0

 

The Development Requires

repositories phalcon repo

10/05 2017

v0.2

0.2.0.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

  • php ^7.0
  • ext-phalcon ^3.0

 

The Development Requires

repositories phalcon repo

11/12 2016

v0.1

0.1.0.0

A library which simplifies the use of the Repository pattern in Phalcon.

  Sources   Download

MIT

The Requires

  • php >=5.5
  • ext-phalcon >=2.0.0

 

The Development Requires

repositories phalcon repo