Theme Service Container

The Tonik\Gin\Foundation\Theme class is a backbone of the theme which performs the services container role. It utilizes a singleton pattern, so every time you initiate it you will receive the same object.

Usage

Initializing theme container

use Tonik\Gin\Foundation\Theme;

$theme = new Theme;

Binding services in the container

To bind a value inside container simply call bind or factory method with a binding name as the first parameter. The second argument should be a closure which returns desired value.

$theme->bind('basic', function() {
  return 'value';
});

Inside closure callback, you have access to the two parameters. First is an instance of Tonik\Gin\Foundation\Theme, second are variables passed on service resolving.

$theme->bind('basic/parameters', function(Theme $theme, $parameters) {
  // $theme: class Tonik\Gin\Foundation\Theme
  // $parameters: ['key' => 'value']
});

// Resolve service with parameter.
$theme->get('basic/parameters', ['key' => 'value']);

Binding singletons

Use bind method to create singleton service. You will receive the same instance of service every time you resolve it from the container.

use Tonik\Gin\Foundation\Config;

$theme->bind('singleton', function() {
  return new Config(['option' => 'value']);
});

Binding factories

The factory method allows you to create service which returns you a new instance on every resolving.

$theme->factory('service', function () {
  return new Config(['option' => 'value']);
});

Resolving services from the container

Run get method with service name as an argument to resolve previously bounded value out of the container.

$theme->get('service');

You can also resolve services which are requiring some sort of parameter.

$theme->get('basic/parameters', ['key' => 'value']);

Checking for bonded service

You may want to check if service is already bounded inside the container. Use has method and service name as a parameter.

$theme->has('service');

Removing service from the container

Call forget to remove previously bounded service inside the container.

$theme->forget('service');
Spotted a mistake or want to contribute to the documentation? Edit this document on Github!