matecat / simple-dic
Simple DIC Client
Requires
- php: >=5.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpstan/phpstan: ^0.11.12
- phpunit/phpunit: ^8.2
- symfony/console: ^4.3
- symfony/yaml: ^4.3
README
Simple DIC is a simple Dependency Injection Container(DIC).
Basic Usage
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.
Change Caching Directory
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'); // ...
Parameters
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%']
Environment Variable Support
To use your environment variable, simply follow the %env(xxxx)%
synthax, consider this example:
logger: class: 'Matecat\SimpleDIC\Dummy\Logger' arguments: ['%env(FOO)%']
Retrieve an entry
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.
Lazy loading and automatic caching
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.
Commands
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();
Support
If you found an issue or had an idea please refer to this section.
Authors
- Mauro Cassani - github
License
This project is licensed under the MIT License - see the LICENSE.md file for details