api-skeletons / doctrine-repository
Plugin Architecture for Doctrine Repositories
Requires
- php: ^7.3
- doctrine/doctrine-orm-module: ^3.0 || ^4.0
- gianarb/angry: ^1.0
- laminas/laminas-servicemanager: ^3.6
- phpunit/phpunit: ^9.5
Requires (Dev)
This package is auto-updated.
Last update: 2024-10-29 06:30:57 UTC
README
This is a replacement for the default repository structure of Doctrine ORM. This replacement implements a plugin architecture for extensisons to repositories.
For instance, if you need access to an encryption/decryption resource inside your repository you could implement it as a plugin accessible as
$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.
Installation
Installation of this module uses composer. For composer documentation, please refer to getcomposer.org.
$ composer require api-skeletons/doctrine-repository
Once installed, add ZF\Doctrine\Repository
to your list of modules inside
config/application.config.php
or config/modules.config.php
.
laminas-component-installer
If you use laminas-component-installer, that plugin will install doctrine-repository as a module for you.
Configuration
No manual configuration is required to use this module.
This module makes these changes to your
doctrine.entitymanager.orm_default
configuration:
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.
Creating a Plugin
The config key for the repository plugin service locator is api-skeletons-doctrine-repository-plugin
.
Your plugin must implement ZF\Doctrine\Repository\Plugin\PluginInterface
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.
Use the testing boolean plugin and testing boolean plugin configuration as a template.