functions.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace FastRoute;
  3. if (!function_exists('FastRoute\simpleDispatcher')) {
  4. /**
  5. * @param callable $routeDefinitionCallback
  6. * @param array $options
  7. *
  8. * @return Dispatcher
  9. */
  10. function simpleDispatcher(callable $routeDefinitionCallback, array $options = [])
  11. {
  12. $options += [
  13. 'routeParser' => 'FastRoute\\RouteParser\\Std',
  14. 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
  15. 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
  16. 'routeCollector' => 'FastRoute\\RouteCollector',
  17. ];
  18. /** @var RouteCollector $routeCollector */
  19. $routeCollector = new $options['routeCollector'](
  20. new $options['routeParser'], new $options['dataGenerator']
  21. );
  22. $routeDefinitionCallback($routeCollector);
  23. return new $options['dispatcher']($routeCollector->getData());
  24. }
  25. /**
  26. * @param callable $routeDefinitionCallback
  27. * @param array $options
  28. *
  29. * @return Dispatcher
  30. */
  31. function cachedDispatcher(callable $routeDefinitionCallback, array $options = [])
  32. {
  33. $options += [
  34. 'routeParser' => 'FastRoute\\RouteParser\\Std',
  35. 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
  36. 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
  37. 'routeCollector' => 'FastRoute\\RouteCollector',
  38. 'cacheDisabled' => false,
  39. ];
  40. if (!isset($options['cacheFile'])) {
  41. throw new \LogicException('Must specify "cacheFile" option');
  42. }
  43. if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) {
  44. $dispatchData = require $options['cacheFile'];
  45. if (!is_array($dispatchData)) {
  46. throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"');
  47. }
  48. return new $options['dispatcher']($dispatchData);
  49. }
  50. $routeCollector = new $options['routeCollector'](
  51. new $options['routeParser'], new $options['dataGenerator']
  52. );
  53. $routeDefinitionCallback($routeCollector);
  54. /** @var RouteCollector $routeCollector */
  55. $dispatchData = $routeCollector->getData();
  56. if (!$options['cacheDisabled']) {
  57. file_put_contents(
  58. $options['cacheFile'],
  59. '<?php return ' . var_export($dispatchData, true) . ';'
  60. );
  61. }
  62. return new $options['dispatcher']($dispatchData);
  63. }
  64. }