Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
RouteDispatcherServiceProvider
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
1 / 1
 register
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
2
 generateRouting
n/a
0 / 0
n/a
0 / 0
3
1<?php
2
3declare(strict_types=1);
4
5namespace Engelsystem\Middleware;
6
7use Engelsystem\Config\Config;
8use Engelsystem\Container\ServiceProvider;
9use FastRoute\Dispatcher as FastRouteDispatcher;
10use FastRoute\RouteCollector;
11use Psr\Http\Server\MiddlewareInterface;
12
13use function FastRoute\cachedDispatcher as FRCashedDispatcher;
14
15class RouteDispatcherServiceProvider extends ServiceProvider
16{
17    public function register(): void
18    {
19        /** @var Config $config */
20        $config = $this->app->get('config');
21
22        $options = [
23            'cacheFile' => $this->app->get('path.cache.routes'),
24        ];
25
26        if ($config->get('environment') == 'development') {
27            $options['cacheDisabled'] = true;
28        }
29
30        $this->app->alias(RouteDispatcher::class, 'route.dispatcher');
31
32        $this->app
33            ->when(RouteDispatcher::class)
34            ->needs(FastRouteDispatcher::class)
35            ->give(function () use ($options) {
36                return $this->generateRouting($options);
37            });
38
39        $this->app
40            ->when(RouteDispatcher::class)
41            ->needs(MiddlewareInterface::class)
42            ->give(LegacyMiddleware::class);
43    }
44
45    /**
46     * Includes the routes.php file
47     *
48     * @codeCoverageIgnore
49     */
50    protected function generateRouting(array $options = []): FastRouteDispatcher
51    {
52        $routesFile = config_path('routes.php');
53        $routesCacheFile = $this->app->get('path.cache.routes');
54
55        if (
56            file_exists($routesCacheFile)
57            && filemtime($routesFile) > filemtime($routesCacheFile)
58        ) {
59            unlink($routesCacheFile);
60        }
61
62        return FRCashedDispatcher(function (RouteCollector $route): void {
63            require config_path('routes.php');
64        }, $options);
65    }
66}