Completed
Push — master ( 54ccda...232c7c )
by Changwan
04:16
created

HttpServiceProvider   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 7

Test Coverage

Coverage 85.71%

Importance

Changes 0
Metric Value
dl 0
loc 60
ccs 30
cts 35
cp 0.8571
rs 10
c 0
b 0
f 0
wmc 5
lcom 0
cbo 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
B register() 0 47 4
A boot() 0 3 1
1
<?php
2
namespace Wandu\Http;
3
4
use Predis\Client;
5
use Psr\Http\Message\ServerRequestInterface;
6
use SessionHandlerInterface;
7
use Wandu\Config\Contracts\Config;
8
use Wandu\DI\ContainerInterface;
9
use Wandu\DI\ServiceProviderInterface;
10
use Wandu\Http\Contracts\CookieJarInterface;
11
use Wandu\Http\Contracts\ParsedBodyInterface;
12
use Wandu\Http\Contracts\QueryParamsInterface;
13
use Wandu\Http\Contracts\ServerParamsInterface;
14
use Wandu\Http\Contracts\SessionInterface;
15
use Wandu\Http\Factory\ResponseFactory;
16
use Wandu\Http\Parameters\CookieJar;
17
use Wandu\Http\Parameters\ParsedBody;
18
use Wandu\Http\Parameters\QueryParams;
19
use Wandu\Http\Parameters\ServerParams;
20
use Wandu\Http\Parameters\Session;
21
use Wandu\Http\Psr\ServerRequest;
22
use Wandu\Http\Session\Configuration;
23
use Wandu\Http\Session\Handler\FileHandler;
24
use Wandu\Http\Session\Handler\GlobalHandler;
25
use Wandu\Http\Session\Handler\RedisHandler;
26
27
class HttpServiceProvider implements ServiceProviderInterface
28
{
29
    /**
30
     * {@inheritdoc}
31
     */
32 1
    public function register(ContainerInterface $app)
33
    {
34
        $app->closure(ResponseFactory::class, function () {
35
            return response(); // singleton
36 1
        });
37
        $app->closure(Configuration::class, function (Config $config) {
38 1
            return new Configuration([
39 1
                'timeout' => $config->get('session.timeout', 3600),
40 1
                'name' => $config->get('session.name', ini_get('session.name') ?: 'WdSessId'),
41 1
                'gc_frequency' => $config->get('session.gc_frequency', 100),
42
            ]);
43 1
        });
44
        $app->closure(SessionHandlerInterface::class, function (Config $config, ContainerInterface $app) {
45 1
            switch ($config->get('session.type')) {
46 1
                case 'file':
47
                    return new FileHandler($config->get('session.path', 'cache/sessions'));
48 1
                case 'redis':
49
                    return new RedisHandler($app[Client::class], $config->get('session.timeout', 3600));
50
                default:
51 1
                    return new GlobalHandler();
52
            }
53 1
        });
54
55 1
        $app->alias(ServerRequestInterface::class, ServerRequest::class);
56 1
        $app->alias('request', ServerRequest::class);
57
58 1
        $app->alias(ServerParamsInterface::class, ServerParams::class);
59 1
        $app->alias('server_params', ServerParams::class);
60
61 1
        $app->alias(QueryParamsInterface::class, QueryParams::class);
62 1
        $app->alias('query_params', QueryParams::class);
63
64 1
        $app->alias(ParsedBodyInterface::class, ParsedBody::class);
65 1
        $app->alias('parsed_body', ParsedBody::class);
66
67
        $app->closure(CookieJar::class, function (ServerRequestInterface $request) {
68
            return $request->getAttribute('cookie');
69 1
        });
70 1
        $app->alias(CookieJarInterface::class, CookieJar::class);
71 1
        $app->alias('cookie', CookieJar::class);
72
73 1
        $app->closure(Session::class, function (ServerRequestInterface $request) {
74
            return $request->getAttribute('session');
75 1
        });
76 1
        $app->alias(SessionInterface::class, Session::class);
77 1
        $app->alias('session', Session::class);
78 1
    }
79
80
    /**
81
     * {@inheritdoc}
82
     */
83 1
    public function boot(ContainerInterface $app)
84
    {
85 1
    }
86
}
87