maduser / argon-doctrine
Doctrine ORM integration for the Argon runtime stack.
Requires
- php: ^8.2
- doctrine/orm: ^3.0
- maduser/argon-container: ^1.0
- symfony/cache: ^7.0
- symfony/var-exporter: ^7.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1.1
- phpunit/phpunit: ^11.5
- slevomat/coding-standard: ^8.24
- squizlabs/php_codesniffer: ^4.0
- vimeo/psalm: ^6.13
README
Doctrine ORM integration for the Argon runtime stack.
Installation
composer require maduser/argon-doctrine
Registration
Register the service provider in your application composition layer:
use Maduser\Argon\Doctrine\Provider\DoctrineServiceProvider; $container->register(DoctrineServiceProvider::class);
The provider registers:
Doctrine\ORM\EntityManagerInterfaceMaduser\Argon\Doctrine\DoctrineEntityManagerRegistryMaduser\Argon\Doctrine\DoctrineEntityManagerDefinitionRegistryMaduser\Argon\Doctrine\Config\DoctrineConfig
Existing container definitions are not replaced.
Entity Managers
Add entity manager definitions during service-provider registration:
use Maduser\Argon\Container\AbstractServiceProvider; use Maduser\Argon\Container\ArgonContainer; use Maduser\Argon\Doctrine\DoctrineEntityManagerDefinitionRegistry; final class DoctrineMappingServiceProvider extends AbstractServiceProvider { #[\Override] public function register(ArgonContainer $container): void { $registry = $container->get(DoctrineEntityManagerDefinitionRegistry::class); $registry->add( name: 'default', connectionParams: [ 'driver' => 'pdo_sqlite', 'path' => dirname(__DIR__) . '/storage/database.sqlite', ], mappingPaths: [ dirname(__DIR__) . '/src', ], ); $registry->add( name: 'analytics', connectionParams: [ 'driver' => 'pdo_mysql', 'host' => '127.0.0.1', 'dbname' => 'analytics', 'user' => 'app', 'password' => '', 'charset' => 'utf8mb4', ], mappingPaths: [ dirname(__DIR__) . '/src/Analytics', ], devMode: false, cacheNamespaceSeed: 'analytics', proxyDir: dirname(__DIR__) . '/storage/cache/doctrine/proxies', ); } }
The default manager name is default. Configure another default explicitly:
use Maduser\Argon\Doctrine\Config\DoctrineParameter; $container->getParameters()->set(DoctrineParameter::DEFAULT_MANAGER, 'analytics');
Usage
Inject Doctrine's default entity manager:
use Doctrine\ORM\EntityManagerInterface; final readonly class UserRepository { public function __construct( private EntityManagerInterface $manager, ) { } }
For multiple managers, inject the registry:
use Maduser\Argon\Doctrine\DoctrineEntityManagerRegistry; $default = $registry->get(); $analytics = $registry->get('analytics');
Managers are created lazily when first resolved. Register manager definitions before resolving EntityManagerInterface or calling $registry->get().
Mapping
This package configures Doctrine ORM attribute metadata through ORMSetup::createAttributeMetadataConfig(). It does not configure XML, YAML, annotation drivers, or automatic mapping discovery.
Boundaries
This package only wires Doctrine ORM into Argon. It does not provide migrations, fixtures, repositories, DBAL-only abstractions, entity discovery, config-file loading, or transaction helpers.
Quality Gates
composer check composer test:coverage composer psalm composer phpcs