A set of compiler passes that connects all components together

Fund package maintenance!

0.4.0 2021-02-24 21:41 UTC


Total Downloads Latest Stable Version Unstable Version

Build Status Code Coverage

The term Chimera (/kɪˈmɪərə/ or /kaɪˈmɪərə/) has come to describe any mythical or fictional animal with parts taken from various animals, or to describe anything composed of very disparate parts, or perceived as wildly imaginative, implausible, or dazzling.

There are many many amazing libraries in the PHP community and with the creation and adoption of the PSRs we don't necessarily need to rely on full stack frameworks to create a complex and well designed software. Choosing which components to use and plugging them together can sometimes be a little challenging.

The goal of this set of packages is to make it easier to do that (without compromising the quality), allowing you to focus on the behaviour of your software.

This package provides creates the configuration of the dependency injection container based on the packages you have required in your application. By relying on symfony/dependency-injection we put the complexity of wiring the components together in compilation time (instead of runtime).

There's a lot of hidden complexity in this wiring process, which definitely affects the organisation of the compiler passes, but the reason for that is to ensure that only things related to your software gets executed when handling requests.


Package is available on Packagist, you can install it using Composer.

composer require chimera/di-symfony

PHP Configuration

In order to make sure that we're dealing with the correct data, we're using assert(), which is a very interesting feature in PHP but not often used. The nice thing about assert() is that we can (and should) disable it in production mode so that we don't have useless statements.

So, for production mode, we recommend you to set zend.assertions to -1 in your php.ini. For development you should leave zend.assertions as 1 and set assert.exception to 1, which will make PHP throw an AssertionError when things go wrong.

Check the documentation for more information:


Symfony DI component is just amazing, and it has everything we need to compile the container and just load it from a set of generated files, but the control of when to update those files now lies in the Kernel/MicroKernel. However we don't necessarily need to have a Kernel controlling that, we can use lcobucci/di-builder and simply get a Symfony DI container. That's what this package uses under the hood to create the services.