Container

Categories

Component ID

2904001

Component name

Container

Component type

module

Maintenance status

Development status

Component security advisory coverage

covered

Downloads

39

Component created

Component changed

Component body

Are you missing the Symfony's dependency injection container? This is what you're looking for!

Usage

To start using this package you must install it via Composer. Thereafter add the next line to the *.info file of the module which is going to populate dependencies to the container:

container = TRUE

Now you're good to go and declare services in a *.services.yml within the module (exactly the same as in Drupal 8).

Besides of that, every module can have a service provider, which must implement the DrupalcontainerServiceProviderInterface, be named as MyModuleNameServiceProvider and be in the Drupalmy_module_name namespace (again, the same as in Drupal 8).

Important recommendation

Set the following configuration to your development settings to reflect the changes of services in YMLs and/or service providers immediately:

// Keep DI container up to date during development.
$conf['container_debug'] = TRUE;

Production environment

During development container tracks the modifications of itself and keeps compiled version up to date. To do this it uses a lot of resource trackers which may produce the overhead to your application.

For any sort of stable environments (production, live or whatever you call it) the container must be treated as finalized and be represented by a single file, which must be deployed alongside with the application (commit the container.php to the VCS once ready, for instance).

What is in the container out of the box?

- The modules parameter which contains a list of modules that uses the container (keys are module names, values - relative paths).
- The validator service allowing you to use the Validator Component of Symfony.
- The annotation.reader and the annotation.discovery services.

A bare minimum, as you can see.

Factory of tagged services

The definition inside of the YAML.

services:
  name.factory:
    class: Drupalmodule_nameFactory
    tags:
      - name: service_collector
        call: addChild
        tag: factory_identifier

  name.factory.child:
    class: Drupalmodule_nameFactoryChild
    tags:
      - name: factory_identifier
        priority: 0

As a result, all services having the factory_identifier tag will be passed to addChild method of the name.factory.