matecat/simple-dic

v1.1.10 2019-09-05 13:12 UTC

README

Codacy Badge license Packagist Scrutinizer Code Quality

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 name
  • arguments: an array of arguments to pass to instantiate the class from the constructor
  • method: 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

License

This project is licensed under the MIT License - see the LICENSE.md file for details