Completed
Push — master ( eaa10a...12d04d )
by Albert
03:25
created

App::loadServiceProviders()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
ccs 0
cts 6
cp 0
rs 9.4285
cc 2
eloc 3
nc 2
nop 0
crap 6
1
<?php
2
3
namespace Albert221\Blog;
4
5
use League\Container\Container;
6
use League\Container\ReflectionContainer;
7
use League\Route\RouteCollection;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Zend\Diactoros\Request;
11
use Zend\Diactoros\Response;
12
use Zend\Diactoros\Response\EmitterInterface;
13
14
class App
15
{
16
    /**
17
     * @var Container
18
     */
19
    protected $container;
20
21
    public function __construct()
22
    {
23
        $this->container = new Container;
24
        $this->container->delegate(new ReflectionContainer);
25
26
        $this->container->add('baseDir', dirname(__DIR__));
27
28
        $this->loadConfig();
29
        $this->loadServiceProviders();
30
    }
31
32
    private function loadConfig()
33
    {
34
        $this->container->add(
35
            'config',
36
            require $this->container->get('baseDir').'/config/config.php'
37
        );
38
    }
39
40
    private function loadServiceProviders()
41
    {
42
        foreach ($this->container->get('config')['serviceProviders'] as $provider) {
43
            $this->container->addServiceProvider($provider);
44
        }
45
    }
46
47
    /**
48
     * Sends response.
49
     */
50
    public function run()
51
    {
52
        /** @var RouteCollection $route */
53
        $route = $this->container->get(RouteCollection::class);
54
        /** @var ServerRequestInterface $request */
55
        $request = $this->container->get(ServerRequestInterface::class);
56
        /** @var ResponseInterface $response */
57
        $response = $this->container->get(ResponseInterface::class);
58
        /** @var EmitterInterface $emitter */
59
        $emitter = $this->container->get(EmitterInterface::class);
60
61
        $response = $route->dispatch($request, $response);
62
63
        $emitter->emit($response);
64
    }
65
}
66