| 
<?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);
 }
 }
 
 |