forked from nikic/FastRoute
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfunctions.php
More file actions
78 lines (66 loc) · 2.54 KB
/
Copy pathfunctions.php
File metadata and controls
78 lines (66 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
declare(strict_types=1);
namespace FastRoute;
use LogicException;
use RuntimeException;
use function file_exists;
use function file_put_contents;
use function function_exists;
use function is_array;
use function var_export;
if (! function_exists('FastRoute\simpleDispatcher')) {
/**
* @param array<string, string> $options
*/
function simpleDispatcher(callable $routeDefinitionCallback, array $options = []): Dispatcher
{
$options += [
'routeParser' => RouteParser\Std::class,
'dataGenerator' => DataGenerator\GroupCountBased::class,
'dispatcher' => Dispatcher\GroupCountBased::class,
'routeCollector' => RouteCollector::class,
];
/** @var RouteCollector $routeCollector */
$routeCollector = new $options['routeCollector'](
new $options['routeParser'](), new $options['dataGenerator']()
);
$routeDefinitionCallback($routeCollector);
return new $options['dispatcher']($routeCollector->getData());
}
/**
* @param array<string, string> $options
*/
function cachedDispatcher(callable $routeDefinitionCallback, array $options = []): Dispatcher
{
$options += [
'routeParser' => RouteParser\Std::class,
'dataGenerator' => DataGenerator\GroupCountBased::class,
'dispatcher' => Dispatcher\GroupCountBased::class,
'routeCollector' => RouteCollector::class,
'cacheDisabled' => false,
];
if (! isset($options['cacheFile'])) {
throw new LogicException('Must specify "cacheFile" option');
}
if (! $options['cacheDisabled'] && file_exists($options['cacheFile'])) {
$dispatchData = require $options['cacheFile'];
if (! is_array($dispatchData)) {
throw new RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"');
}
return new $options['dispatcher']($dispatchData);
}
$routeCollector = new $options['routeCollector'](
new $options['routeParser'](), new $options['dataGenerator']()
);
$routeDefinitionCallback($routeCollector);
/** @var RouteCollector $routeCollector */
$dispatchData = $routeCollector->getData();
if (! $options['cacheDisabled']) {
file_put_contents(
$options['cacheFile'],
'<?php return ' . var_export($dispatchData, true) . ';'
);
}
return new $options['dispatcher']($dispatchData);
}
}