miniature / di_container
A simple implementation of a dependency injection container for PHP-classes and parameters (array, string, numeric). It is consuming array data.
Requires
- php: >=7.4
This package is auto-updated.
Last update: 2025-04-24 22:13:20 UTC
README
DiContainer
Warning!
This is still on an experimental level. We don't know if we've got everything together currently. Extensive testing needs to be done as well.
Purpose
This package provides a simple dependecy injection container. It runs on the basis of injected data (PHP-array). The syntax that is used for interpreting the wiring can be manipulated by the injection of the instance of a syntax class.
Installation
Using Composer
composer require miniature/di_container
Downloading Package
Unzip to a directory named Miniature
.
Add to your autoload something like the following:
<?php function miniature_autoload($class) { $fileName = str_replace('\\', '/', realpath(__DIR__) . '/' . $class ) . '.php'; if (preg_match('/^(.*\/Miniature)\/(\w+)\/((\w+\/)*)(\w+)\.php/', $fileName)) { $newFileName = preg_replace( '/^(.*\/Miniature)\/(\w+)\/((\w+\/)*)(\w+)\.php/', '$1/$2/src/$3$5.php', $fileName ); if (is_file($newFileName)) { require $newFileName; } } } spl_autoload_register('miniature_autoload');
Can be that you must adjust the file path concatenation for filePath
by setting the relative path in the filepath()
statement.
Instantiating
$myDiContainer = (new \Miniature\DiContainer\DiContainer()) ->readMappings($configArray);
The syntax
Find information about the syntax here.
Overriding the syntax
The syntax can be overridden by incting an implementation of
\Miniature\DiContainer\Syntax\MapperAbstract
.
The class
\Miniature\DiContainer\Syntax\MapperSymfonyStyle
is an example of how it works.
$myDiContainer = ( new \Miniature\DiContainer\DiContainer( new \Miniature\DiContainer\Syntax\MapperSymfonyStyle() ) )->readMappings($configArray);
Providing the mapping
This is absolutely your choice where the mapping comes from.
We don't recommend using the reader class Miniature\Component\Reader\Config
out of context since it might be moved in the future.
If you want the advantages of the
Reader
and the
environment based overrides
You might consider the use of the
public
key
in combination of
the availability in environments
in order to create a grey-box/white-box behaviour
component
as a provider for your DI-Mapping.