Passed
Push — master ( d21aeb...6f7326 )
by Alexander
27:36 queued 12:36
created

RouterProvider::register()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 9
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 17
rs 9.9666
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Provider;
6
7
use Psr\Container\ContainerInterface;
8
use Yiisoft\Composer\Config\Builder;
9
use Yiisoft\Di\Container;
10
use Yiisoft\Di\Support\ServiceProvider;
11
use Yiisoft\Router\FastRoute\UrlGenerator;
12
use Yiisoft\Router\FastRoute\UrlMatcher;
13
use Yiisoft\Router\Group;
14
use Yiisoft\Router\RouteCollection;
15
use Yiisoft\Router\RouteCollectorInterface;
16
use Yiisoft\Router\UrlGeneratorInterface;
17
use Yiisoft\Router\UrlMatcherInterface;
18
use Yiisoft\Yii\Web\Data\Middleware\FormatDataResponse;
19
20
final class RouterProvider extends ServiceProvider
21
{
22
    public function register(Container $container): void
23
    {
24
        $container->set(RouteCollectorInterface::class, Group::create());
25
26
        $container->set(UrlMatcherInterface::class, static function (ContainerInterface $container) {
27
            $routes = require Builder::path('routes');
28
29
            $collector = $container->get(RouteCollectorInterface::class);
30
            $collector->addGroup(
31
                Group::create(null, $routes)
32
                    ->addMiddleware(FormatDataResponse::class)
33
            );
34
35
            return new UrlMatcher(new RouteCollection($collector));
36
        });
37
38
        $container->set(UrlGeneratorInterface::class, UrlGenerator::class);
39
    }
40
}
41