tbachert / spi
Service provider loading facility
Installs: 481
Dependents: 2
Suggesters: 1
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:composer-plugin
Requires
- php: ^8.1
- composer-plugin-api: ^2.0
- composer/semver: ^1.0 || ^2.0 || ^3.0
Requires (Dev)
- composer/composer: ^2.0
- infection/infection: ^0.27.9
- phpunit/phpunit: ^10.5
- psalm/phar: ^5.18
This package is auto-updated.
Last update: 2024-05-14 20:04:09 UTC
README
Service provider loading facility, inspired by Javas ServiceLoader
.
Install
composer require tbachert/spi
Usage
Registering service providers
Service provider implementations must provide a public zero-arguments constructor.
Registering via composer.json extra.spi
composer config --json --merge extra.spi.Namespace\\Service '["Namespace\\Implementation"]'
Registering via php
ServiceLoader::register('Namespace\Service', 'Namespace\Implementation');
Application authors
Make sure to allow the composer plugin to be able to load service providers.
composer config allow-plugins.tbachert/spi true
Loading service providers
foreach (ServiceLoader::load('Namespace\Service') as $provider) { // ... }
Handling invalid service configurations
$loader = ServiceLoader::load('Namespace\Service'); for ($it = $loader->getIterator(); $it->valid(); $it->next()) { try { $provider = $it->current(); } catch (ServiceConfigurationError) {} }