Pimple 3 is a fast, lightweight, popular Dependency Injection container for PHP. ContainerInterop is an open-source standard for interoperability between Dependency Injection containers. This tool is a standards-compliant ContainerInterop wrapper for Pimple 3.
It works in PHP 5.5, 5.6 and 7.0.
The wrapper allows full access to all Pimple functionality, via a __call()
method, and ArrayAccess
implementation. This allows you to call any method that exists in Pimple, directly on the wrapper. You can also add
services using $container['service-id'] = //something
, as array access is supported.
As per the standard, $container->has($serviceId)
will tell you if a service is configured in the container. $container->get($serviceId)
will retrieve the service. An implementation of Interop\Container\Exception\NotFoundException
is thrown if you call get()
and the service doesn't exist. All other errors from Pimple result in an instance of Interop\Container\Exception\ContainerException
being thrown.
It is recommended to install this via composer:
composer require samburns/pimple3-containerinterop
You can configure the Pimple container before wrapping it in a standards-compliant adapter:
use Pimple\Container as PimpleContainer;
use SamBurns\Pimple3ContainerInterop\ServiceContainer;
$rawPimpleContainer = new PimpleContainer();
$rawPimpleContainer['service-id'] = function () {return new \Whatever();};
$container = ServiceContainer($rawPimpleContainer);
Or you can pass your own Pimple\ServiceProviderInterface
implementions into the wrapper, to be applied to the inner Pimple container:
use SamBurns\Pimple3ContainerInterop\ServiceContainer;
use My\ServiceProvider;
$container = new ServiceContainer();
$container->addConfig(new ServiceProvider());
There is even a named constructor you can use, if you want to spin up a ServiceContainer
and configure it with a ServiceProviderInterface
all in one line:
use SamBurns\Pimple3ContainerInterop\ServiceContainer;
use My\ServiceProvider;
$container = ServiceContainer::constructConfiguredWith(new ServiceProvider());
PimpleInterop and Acclimate provide excellent alternatives if you don't like this library. Although using Pimple v1 and not v3, they do offer the 'delegate lookup' feature described as optional in the standard, allowing you to combine multiple containers.
Contributions welcome. Fork the repo, make your changes, and create a pull request. To run the tests, type ./bin/test
. PHPUnit integration tests and PHPSpec unit tests will run.