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
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: https://secure.php.net/manual/en/function.assert.php
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.
MIT, see LICENSE.