HttpKernelProvider   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 8

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 8
dl 0
loc 50
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 34 1
A getDefaults() 0 7 1
A subscribe() 0 4 1
1
<?php
2
3
/*
4
 * This file is part of the jade/jade package.
5
 *
6
 * (c) Slince <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Jade\HttpKernel;
13
14
use Jade\ContainerInterface;
15
use Jade\EventProviderInterface;
16
use Jade\Routing\Router;
17
use Jade\ServiceProviderInterface;
18
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
19
use Zend\HttpHandlerRunner\Emitter\SapiEmitter;
20
use Zend\HttpHandlerRunner\Emitter\SapiStreamEmitter;
21
22
class HttpKernelProvider implements ServiceProviderInterface, EventProviderInterface
23
{
24
    public function register(ContainerInterface $container)
25
    {
26
        $container->add($this->getDefaults());
27
        // 路由控制
28
        $container['router'] = function($c){
29
            return new Router($c['route_collector']->getRoutes());
30
        };
31
        $container['router_listener'] = function($c){
32
            return new RouterListener($c['router']);
33
        };
34
        // http kernel
35
        $container['controller_resolver'] = function($c){
36
            return new $c['http_kernel.controller_resolver_class']($c);
37
        };
38
        $container['argument_resolver'] = function($c){
39
            return new $c['http_kernel.argument_resolver_class'];
40
        };
41
        // http response emitter
42
        $container['http_emitter'] = function(){
43
            return new EmitterDecorator(
44
                new SapiEmitter(),
45
                new SapiStreamEmitter()
46
            );
47
        };
48
        $container['http_kernel'] = function($c){
49
            return new HttpKernel(
50
                $c['event_dispatcher'],
51
                $c['controller_resolver'],
52
                $c['argument_resolver'],
53
                $c['middleware_pipeline'],
54
                $c['http_emitter']
55
            );
56
        };
57
    }
58
59
    protected function getDefaults()
60
    {
61
        return [
62
            'http_kernel.controller_resolver_class' => ControllerResolver::class,
63
            'http_kernel.argument_resolver_class' => ArgumentResolver::class
64
        ];
65
    }
66
67
    public function subscribe(EventDispatcherInterface $eventDispatcher, ContainerInterface $container)
68
    {
69
        $eventDispatcher->addSubscriber($container['router_listener']);
70
    }
71
}