slick / di
Slick package for dependency injection container.
Installs: 3 831
Dependents: 3
Suggesters: 0
Security: 0
Stars: 0
Watchers: 4
Forks: 0
Open Issues: 0
Requires
- php: >=8.0
- psr/container: ^1.0||^2.0
Requires (Dev)
- behat/behat: 4.x-dev
- phpspec/phpspec: ^8.0@dev
- squizlabs/php_codesniffer: 4.0.x-dev
Provides
- psr/container-implementation: 1.0.0
This package is auto-updated.
Last update: 2023-05-16 00:04:24 UTC
README
slick/di
is an easy dependency injection container for PHP 8.0+.
It aims to be very lightweight and tries to remove a lot of the guessing and magic stuff that dependency containers use those days.
It also allows you to nest containers witch can become very useful if you have several packages that you reuse in your applications, allowing you to define containers with default dependencies in those packages for later override and usage them in your application.
This package is compliant with PSR-2 code standards and PSR-4 autoload standards. It also applies the semantic version 2.0.0 specification.
Install
Via Composer
$ composer require slick/di
Usage
To create a dependency container we need to create at least a services.php
file with all our dependency definitions:
use Slick\Di\Container; use Slick\Di\Definition\ObjectDefinition; /** * Dependency injection object definition example */ return [ 'config' => [ 'color' => 'blue', 'gear' => 'manual' ], 'engineService' => ObjectDefinition::create(Engine::class) ->with('@config') ->call('setMode')->with('simple'), CarSettings::class => function(Container $container) { return new CarSettings($container->get('config')); } ];
Now to build the dependency container we need to use the ContainerBuilder
factory class like this:
use Slick\Di\ContainerBuilder; $definitionsFile = __DIR__ . '/services.php'; $container = (new ContainerBuilder($definitionsFile))->getContainer();
With that, we are ready to create and inject dependencies with our container:
class Car { /** * @var EngineInterface */ protected $engine; public function __construct(CarSettings $settings) { // $settings will be injected if created with the Container::make() method. } /** * @inject engineService * * @return self */ public function setEngine(EngineInterface $engine) { $this->engine = $engine; return $this; } } $myCar = $container->make(Car::class);
Please refer to the full documentation site for more on slick/di
package.
Testing
We use Behat to describe features and for acceptance tests and PHPSpec for unit testing.
# unit tests $ vendor/bin/phpspec # acceptance tests $ vendor/bin/behat
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email slick.framework@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.