Completed
Push — master ( 413e31...6028d7 )
by Changwan
06:35
created

HttpServiceProvider   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
dl 0
loc 60
ccs 22
cts 24
cp 0.9167
rs 10
c 0
b 0
f 0
wmc 5
lcom 0
cbo 6

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\DI\ContainerInterface;
8
use Wandu\DI\ServiceProviderInterface;
9
use Wandu\Http\Contracts\CookieJarInterface;
10
use Wandu\Http\Contracts\ParsedBodyInterface;
11
use Wandu\Http\Contracts\QueryParamsInterface;
12
use Wandu\Http\Contracts\ServerParamsInterface;
13
use Wandu\Http\Contracts\SessionInterface;
14
use Wandu\Http\Factory\ResponseFactory;
15
use Wandu\Http\Parameters\CookieJar;
16
use Wandu\Http\Parameters\ParsedBody;
17
use Wandu\Http\Parameters\QueryParams;
18
use Wandu\Http\Parameters\ServerParams;
19
use Wandu\Http\Parameters\Session;
20
use Wandu\Http\Psr\ServerRequest;
21
use Wandu\Http\Session\Configuration;
22
use Wandu\Http\Session\Handler\FileHandler;
23
use Wandu\Http\Session\Handler\GlobalHandler;
24
use Wandu\Http\Session\Handler\RedisHandler;
25
use function Wandu\Foundation\config;
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 () {
38
            return new Configuration([
39
                'timeout' => config('session.timeout', 3600),
40
                'name' => config('session.name', ini_get('session.name') ?: 'WdSessId'),
41
                'gc_frequency' => config('session.gc_frequency', 100),
42
            ]);
43 1
        });
44
        $app->closure(SessionHandlerInterface::class, function (ContainerInterface $app) {
45
            switch (config('session.type')) {
46
                case 'file':
47
                    return new FileHandler(config('session.path', 'cache/sessions'));
48
                case 'redis':
49
                    return new RedisHandler($app[Client::class], config('session.timeout', 3600));
50
                default:
51
                    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 1
            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 1
            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
    public function boot(ContainerInterface $app)
84
    {
85
    }
86
}
87