1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <?php
- namespace FastRoute;
- if (!function_exists('FastRoute\simpleDispatcher')) {
- /**
- * @param callable $routeDefinitionCallback
- * @param array $options
- *
- * @return Dispatcher
- */
- function simpleDispatcher(callable $routeDefinitionCallback, array $options = [])
- {
- $options += [
- 'routeParser' => 'FastRoute\\RouteParser\\Std',
- 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
- 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
- 'routeCollector' => 'FastRoute\\RouteCollector',
- ];
- /** @var RouteCollector $routeCollector */
- $routeCollector = new $options['routeCollector'](
- new $options['routeParser'], new $options['dataGenerator']
- );
- $routeDefinitionCallback($routeCollector);
- return new $options['dispatcher']($routeCollector->getData());
- }
- /**
- * @param callable $routeDefinitionCallback
- * @param array $options
- *
- * @return Dispatcher
- */
- function cachedDispatcher(callable $routeDefinitionCallback, array $options = [])
- {
- $options += [
- 'routeParser' => 'FastRoute\\RouteParser\\Std',
- 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
- 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
- 'routeCollector' => 'FastRoute\\RouteCollector',
- '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);
- }
- }
|