This library provides integration for PHP-DI with Zend Framework 2.
PHP-DI is a Dependency Injection Container for PHP.
If you are looking for Zend Framework 1 integration, head over here.
Require the libraries with Composer:
{
"require": {
"mnapoli/php-di": "*",
"mnapoli/php-di-zf2": "*"
}
}
To use PHP-DI in your ZF2 application, you need to make the following two changes:
In your application_root/module/Application/config/module.config.php, find the service_manager section which looks like this:
'service_manager' => array(
'abstract_factories' => array(
'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
'Zend\Log\LoggerAbstractServiceFactory',
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
),
Add a factory function to the Zend Service Manager for the PHP-DI container. The result will look like this:
'service_manager' => array(
'abstract_factories' => array(
'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
'Zend\Log\LoggerAbstractServiceFactory',
),
'aliases' => array(
'translator' => 'MvcTranslator',
),
'factories' => array(
'DI\Container' => function () {
// Configure your container here
return new DI\Container();
},
),
),
Now in each of your controllers, you must extend DI\ZendFramework2\InjectedAbstractActionController or DI\ZendFramework2\InjectedAbstractRestfulController, depending on what type of controller it is:
class IndexController extends AbstractActionController
becomes
use DI\ZendFramework2\InjectedAbstractActionController;
class IndexController extends InjectedAbstractActionController
or
class IndexController extends AbstractRestfulController
becomes
use DI\ZendFramework2\InjectedAbstractRestfulController;
class IndexController extends InjectedAbstractRestfulController
That's it!
Now you dependencies are injected in your controllers!
Head over to the PHP-DI documentation if needed.