|
3 | 3 | [Aura.Di](https://github.com/auraphp/Aura.Di/) provides a serializable dependency |
4 | 4 | injection container with the following features: |
5 | 5 |
|
6 | | -- constructor and setter injection |
7 | | - |
8 | | -- inheritance of constructor parameter and setter method values from parent classes |
9 | | - |
10 | | -- inheritance of setter method values from interfaces and traits |
11 | | - |
12 | | -- lazy-loaded instances, services, includes/requires, and values |
13 | | - |
14 | | -- instance factories |
15 | | - |
16 | | -- optional auto-resolution of typehinted constructor parameter values |
17 | | - |
| 6 | +- constructor and setter injection. |
| 7 | +- inheritance of constructor parameter and setter method values from parent |
| 8 | + classes. |
| 9 | +- inheritance of setter method values from interfaces and traits. |
| 10 | +- lazy-loaded instances, services, includes/requires, and values. |
| 11 | +- instance factories. |
| 12 | +- optional auto-resolution of typehinted constructor parameter values. |
18 | 13 |
|
19 | 14 | ## Installing Aura.Di |
20 | 15 |
|
21 | | -Aura.Di v3 only implements [container-interop](https://github.com/container-interop/container-interop). |
| 16 | +Aura.Di only implements [container-interop](https://github.com/container-interop/container-interop) |
| 17 | +as of version 3 (in beta at the time of writing). |
22 | 18 |
|
23 | 19 | ```bash |
24 | 20 | $ composer require "aura/di:3.0.*@beta" |
25 | 21 | ``` |
26 | 22 |
|
27 | 23 | ## Configuration |
28 | 24 |
|
29 | | -Aura.Di can help you to reorganize your code better with |
| 25 | +Aura.Di can help you to organize your code better with |
30 | 26 | [ContainerConfig classes](http://auraphp.com/packages/Aura.Di/config.html) and |
31 | | -[two step configuration](http://auraphp.com/blog/2014/04/07/two-stage-config/) |
32 | | -in this example, we'll have that in `config/services.php`. |
| 27 | +[two step configuration](http://auraphp.com/blog/2014/04/07/two-stage-config/). |
| 28 | +In this example, we'll put that in `config/services.php`: |
33 | 29 |
|
34 | 30 | ```php |
35 | 31 | <?php |
36 | 32 | use Aura\Di\ContainerBuilder; |
37 | 33 |
|
38 | | -$container_builder = new ContainerBuilder(); |
| 34 | +$containerBuilder = new ContainerBuilder(); |
39 | 35 |
|
40 | | -// use the builder to create and configure a container |
41 | | -// using an array of ContainerConfig classes |
42 | | -// make sure the classes can be autoloaded |
43 | | -return $container_builder->newConfiguredInstance([ |
44 | | - 'Application\_Config\Common', |
| 36 | +// Use the builder to create and configure a container using an array of |
| 37 | +// ContainerConfig classes. Make sure the classes can be autoloaded! |
| 38 | +return $containerBuilder->newConfiguredInstance([ |
| 39 | + 'Application\Config\Common', |
45 | 40 | ]); |
46 | 41 | ``` |
47 | 42 |
|
48 | | -The bare minimal `ContainerConfig ` code needed to make zend-expressive work is |
| 43 | +The bare minimum `ContainerConfig` code needed to make zend-expressive work is: |
49 | 44 |
|
50 | 45 | ```php |
51 | 46 | <?php |
52 | | -namespace Application\_Config; |
| 47 | +// In src/Config/Common.php: |
| 48 | +namespace Application\Config; |
53 | 49 |
|
54 | 50 | use Aura\Di\Container; |
55 | 51 | use Aura\Di\ContainerConfig; |
| 52 | +use Aura\Router\Generator; |
| 53 | +use Aura\Router\RouteCollection; |
| 54 | +use Aura\Router\RouteFactory; |
| 55 | +use Aura\Router\Router; |
| 56 | +use Zend\Escaper\Escaper; |
| 57 | +use Zend\Expressive\Application; |
| 58 | +use Zend\Expressive\Container; |
| 59 | +use Zend\Expressive\Router\AuraRouter; |
| 60 | +use Zend\Expressive\Router\Route; |
| 61 | +use Zend\Expressive\Router\RouterInterface; |
| 62 | +use Zend\Expressive\Template; |
56 | 63 |
|
57 | 64 | class Common extends ContainerConfig |
58 | 65 | { |
59 | 66 | public function define(Container $di) |
60 | 67 | { |
61 | | - $di->params['Aura\Router\RouteCollection'] = array( |
62 | | - 'route_factory' => $di->lazyNew('Aura\Router\RouteFactory'), |
| 68 | + $di->params[RouteCollection::class] = array( |
| 69 | + 'route_factory' => $di->lazyNew(RouteFactory::class), |
63 | 70 | ); |
64 | | - $di->params['Aura\Router\Router'] = array( |
65 | | - 'routes' => $di->lazyNew('Aura\Router\RouteCollection'), |
66 | | - 'generator' => $di->lazyNew('Aura\Router\Generator'), |
| 71 | + $di->params[Router::class] = array( |
| 72 | + 'routes' => $di->lazyNew(RouteCollection::class), |
| 73 | + 'generator' => $di->lazyNew(Generator::class), |
67 | 74 | ); |
68 | | - $di->params['Zend\Expressive\Router\Aura']['router'] = $di->lazyNew('Aura\Router\Router'); |
69 | | - $di->set('Zend\Expressive\Router\RouterInterface', $di->lazyNew('Zend\Expressive\Router\Aura')); |
70 | | - $di->set('Zend\Expressive\Container\ApplicationFactory', $di->lazyNew('Zend\Expressive\Container\ApplicationFactory')); |
71 | | - $di->set('Zend\Expressive\Application', $di->lazyGetCall('Zend\Expressive\Container\ApplicationFactory', '__invoke', $di)); |
| 75 | + $di->params[AuraRouter::class]['router'] = $di->lazyNew(Router::class); |
| 76 | + $di->set(RouterInterface::class, $di->lazyNew(AuraRouter::class)); |
| 77 | + $di->set(Container\ApplicationFactory::class, $di->lazyNew(Container\ApplicationFactory::class)); |
| 78 | + $di->set(Application::class, $di->lazyGetCall(Container\ApplicationFactory::class, '__invoke', $di)); |
72 | 79 |
|
73 | 80 | // Templating |
74 | 81 | // In most cases, you can instantiate the template renderer you want to use |
75 | 82 | // without using a factory: |
76 | | - $di->set('Zend\Expressive\Template\TemplateInterface', $di->lazyNew('Zend\Expressive\Template\Plates')); |
| 83 | + $di->set(Template\TemplateInterface::class, $di->lazyNew(Template\Plates::class)); |
77 | 84 |
|
78 | 85 | // These next two can be added in any environment; they won't be used unless |
79 | 86 | // you add the WhoopsErrorHandler as the FinalHandler implementation: |
80 | | - $di->set('Zend\Expressive\Container\WhoopsFactory', $di->lazyNew('Zend\Expressive\Container\WhoopsFactory')); |
81 | | - $di->set('Zend\Expressive\Whoops', $di->lazyGetCall('Zend\Expressive\Container\WhoopsFactory', '__invoke', $di)); |
82 | | - $di->set('Zend\Expressive\Container\WhoopsPageHandlerFactory', $di->lazyNew('Zend\Expressive\Container\WhoopsPageHandlerFactory')); |
83 | | - $di->set('Zend\Expressive\WhoopsPageHandler', $di->lazyGetCall('Zend\Expressive\Container\WhoopsPageHandlerFactory', '__invoke', $di)); |
| 87 | + $di->set(Container\WhoopsFactory::class, $di->lazyNew(Container\WhoopsFactory::class)); |
| 88 | + $di->set('Zend\Expressive\Whoops', $di->lazyGetCall(Container\WhoopsFactory::class, '__invoke', $di)); |
| 89 | + $di->set(Container\WhoopsPageHandlerFactory::class, $di->lazyNew(Container\WhoopsPageHandlerFactory::class)); |
| 90 | + $di->set('Zend\Expressive\WhoopsPageHandler', $di->lazyGetCall(Container\WhoopsPageHandlerFactory::class, '__invoke', $di)); |
84 | 91 |
|
85 | 92 | // Error Handling |
86 | 93 |
|
87 | 94 | // If in development: |
88 | | - $di->set('Zend\Expressive\Container\WhoopsErrorHandlerFactory', $di->lazyNew('Zend\Expressive\Container\WhoopsErrorHandlerFactory')); |
89 | | - $di->set('Zend\Expressive\FinalHandler', $di->lazyGetCall('Zend\Expressive\Container\WhoopsErrorHandlerFactory', '__invoke', $di)); |
| 95 | + $di->set(Container\WhoopsErrorHandlerFactory::class, $di->lazyNew(Container\WhoopsErrorHandlerFactory::class)); |
| 96 | + $di->set('Zend\Expressive\FinalHandler', $di->lazyGetCall(Container\WhoopsErrorHandlerFactory::class, '__invoke', $di)); |
90 | 97 |
|
91 | 98 | // If in production: |
92 | | - // $di->set('Zend\Expressive\FinalHandler', $di->lazyGetCall('Zend\Expressive\Container\TemplatedErrorHandlerFactory', '__invoke', $di)); |
| 99 | + // $di->set('Zend\Expressive\FinalHandler', $di->lazyGetCall(Container\TemplatedErrorHandlerFactory::class, '__invoke', $di)); |
93 | 100 | } |
94 | 101 |
|
95 | 102 | public function modify(Container $di) |
96 | 103 | { |
97 | 104 | /* |
98 | | - $router = $di->get('Zend\Expressive\Router\RouterInterface'); |
99 | | - $router->addRoute(new \Zend\Expressive\Router\Route('/hello/{name}', function ($request, $response, $next) { |
100 | | - $escaper = new \Zend\Escaper\Escaper(); |
| 105 | + $router = $di->get(RouterInterface::class); |
| 106 | + $router->addRoute(new Route('/hello/{name}', function ($request, $response, $next) { |
| 107 | + $escaper = new Escaper(); |
101 | 108 | $name = $request->getAttribute('name', 'World'); |
102 | 109 | $response->write('Hello ' . $escaper->escapeHtml($name)); |
103 | 110 | return $response; |
104 | | - }, \Zend\Expressive\Router\Route::HTTP_METHOD_ANY, 'hello')); |
| 111 | + }, Route::HTTP_METHOD_ANY, 'hello')); |
105 | 112 | */ |
106 | 113 | } |
107 | 114 | } |
|
0 commit comments