Simple DIC is a simple Dependency Injection Container(DIC).
To init DIC you must provide a configuration file. Use initFromFile
method:
Here is a sample (in YAML format):
dummy-key: 'dummy-value'
dummy-array: [43243,2432,4324,445667]
three: 3
two: 2
acme:
class: Matecat\SimpleDIC\Dummy\Acme
acme-calculator:
class: Matecat\SimpleDIC\Dummy\AcmeCalculator
method: init
method_arguments: ['@three', '@two']
acme-parser:
class: Matecat\SimpleDIC\Dummy\AcmeParser
arguments: ['string']
acme-repo:
class: Matecat\SimpleDIC\Dummy\AcmeRepo
arguments: ['@acme']
After pass the name of dependency, you can specify:
class
: the full qualified class namearguments
: an array of arguments to pass to instantiate the class from the constructormethod
: if you want to run a specific method of the class (method could be static or not not)method_arguments
: an array of arguments to pass to instantiate the runned class method
If you want to pass an entry already present to other one, simply use the '@' symbol.
You cah use setCacheDir
to setup yor cache directory. Do this before invoke initFromFile
method:
DIC::setCacheDir(__DIR__.'/../_cache_custom');
DIC::initFromFile(__DIR__ . '/../config/ini/redis.ini');
// ...
If you want to use a separate parameters file, you can use DICParams
class. Take a look at the following example of params configuration file
(YAML format):
your_secret_token: 'YOUR_SECRET_TOKEN'
your_secret_password: 'YOUR_SECRET_PASS'
You can setup DICParams
class now:
use Matecat\SimpleDIC\DICParams;
DICParams::initFromFile('your_params_file.yaml');
And then, you can use '%' synthax in your DIC configuration file. Please bear in mind that you MUST set parameters before instantiate DIC.
client:
class: 'SimpleDIC\Dummy\Client'
arguments: ['%your_secret_token%', '%your_secret_password%']
To use your environment variable, simply follow the %env(xxxx)%
synthax, consider this example:
logger:
class: 'Matecat\SimpleDIC\Dummy\Logger'
arguments: ['%env(FOO)%']
In order to retrieve an entry use get
method:
use Matecat\SimpleDIC\DIC;
$dependency = DIC::get('key');
Please note that the method returns:
false
if the entry has a wrong configuration;NULL
if the entry does not exists.
The entries are lazy-loaded when you invoke get
or has
method for the first time.
If you have apcu enabled on your system, DIC will automatically cache the entry in APCU store. Please note that the id in cache always refers to the sha1() of the init file.
If you have an application which uses Symfony Console, you have some commands available:
dic:debug
Dumps the entry list in the DIC.
You can register the commands in your app, consider this example:
#!/usr/bin/env php
<?php
set_time_limit(0);
...
use Symfony\Component\Yaml\Yaml;
// create symfony console app
$app = new \Symfony\Component\Console\Application('Simple DIC', 'console tool');
// config
$configFile = __DIR__.'/../config/yaml/config.yaml';
// add commands here
$app->add(new \Matecat\SimpleDIC\Console\DICDebug($configFile));
$app->run();
If you found an issue or had an idea please refer to this section.
- Mauro Cassani - github
This project is licensed under the MIT License - see the LICENSE.md file for details