2017 © Pedro Peláez
 

library zf-doctrine-repository

Plugin Architecture for Doctrine Repositories

image

api-skeletons/zf-doctrine-repository

Plugin Architecture for Doctrine Repositories

  • Thursday, April 5, 2018
  • by tom_anderson
  • Repository
  • 1 Watchers
  • 0 Stars
  • 338 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 5 Versions
  • 18 % Grown

The README.md

zf-doctrine-repository

Build Status Gitter Total Downloads, (*1)

This is a replacement for the default repository structure of Doctrine ORM. This replacement implements a plugin architecture for extensisons to repositories., (*2)

For instance, if you need access to an encryption/decryption resource inside your repository you could implement it as a plugin accessible as, (*3)

$this->plugin('encryption')->encrypt($value);

Why use this repository structure?

The default repository for Doctrine ORM gives no access to resources outside Doctrine. And the Doctrine ORM Object Manager does not give access to a dependency injection container. So when your applications require more from their repositories the only option is to write your own dependency injection enabled repository factory. To create a standard way to organize this dependency injection repository factory: this is an acceptable solution., (*4)

Installation

Installation of this module uses composer. For composer documentation, please refer to getcomposer.org., (*5)

$ composer require api-skeletons/zf-doctrine-repository

Once installed, add ZF\Doctrine\Repository to your list of modules inside config/application.config.php or config/modules.config.php., (*6)

zf-component-installer

If you use zf-component-installer, that plugin will install zf-doctrine-repository as a module for you., (*7)

Configuration

No manual configuration is required to use this module., (*8)

This module makes these changes to your doctrine.entitymanager.orm_default configuration:, (*9)

namespace ZF\Doctrine\Repository;
...
    'doctrine' => [
        'configuration' => [
            'orm_default' => [
                'repository_factory' => RepositoryFactory::class,
                'default_repository_class_name' => ObjectRepository::class,
            ],
        ],
    ],

If your application already has a default repository class you can edit it to implement ZF\Doctrine\Repository\ObjectRepositoryInterface and the RepositoryFactory can use it., (*10)

Creating a Plugin

The config key for the repository plugin service locator is zf-doctrine-repository-plugin. Your plugin must implement ZF\Doctrine\Repository\Plugin\PluginInterface, (*11)

The __construct of your Plugin will take an array including the repository and any other parameters. Access to the repository gives you access to the ObjectManager., (*12)

Use the testing boolean plugin and testing boolean plugin configuration as a template., (*13)

Available Plugins

zf-doctrine-repository-query-provider - zfcampus/zf-apigility-doctrine includes Query Providers which may take the current authenticated user and add complex filters to a a QueryBuilder object in order to filter whether the user has access to a given entity. This filtering mechanism can be used across a whole application whenever authorized access is needed to an entity., (*14)

use Database\Entity\User;

// Return a single User entity fetched by applying the User Query Provider to a given `$id`
$objectManager->getRepository(User::class)->plugin('queryProvider')->find($id);

Future Plugin Plans

This repository is forward-looking and architected to support the needs today and into the future. Here are examples of repository plugins to be developed:, (*15)

zf-doctrine-repository-audit - A trigger-happy application will create a structure of triggers on all tables accessible as Doctrine entities. Data would be accessible directly or to access the audit data with a plugin:, (*16)

use Database\Entity\User;

// Return the date an entity was created using the audit trail.
$objectManager->getRepository(User::class)->plugin('audit')->getCreatedAt(User $userEntity);

// Return the date an entity was last modified using the audit trail.
$objectManager->getRepository(User::class)->plugin('audit')->getUpdatedAt(User $userEntity);

// Return the complete audit trail for an entity
$objectManager->getRepository(User::class)->plugin('audit')->getAuditTrail(User $userEntity);

The Versions

11/07 2017
10/07 2017
09/07 2017

1.0.0

1.0.0.0

Plugin Architecture for Doctrine Repositories

  Sources   Download

MIT

The Requires

 

The Development Requires

by Tom H Anderson