123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- namespace FastRoute;
- class RouteCollector
- {
- /** @var RouteParser */
- protected $routeParser;
- /** @var DataGenerator */
- protected $dataGenerator;
- /** @var string */
- protected $currentGroupPrefix;
- /**
- * Constructs a route collector.
- *
- * @param RouteParser $routeParser
- * @param DataGenerator $dataGenerator
- */
- public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator)
- {
- $this->routeParser = $routeParser;
- $this->dataGenerator = $dataGenerator;
- $this->currentGroupPrefix = '';
- }
- /**
- * Adds a route to the collection.
- *
- * The syntax used in the $route string depends on the used route parser.
- *
- * @param string|string[] $httpMethod
- * @param string $route
- * @param mixed $handler
- */
- public function addRoute($httpMethod, $route, $handler)
- {
- $route = $this->currentGroupPrefix . $route;
- $routeDatas = $this->routeParser->parse($route);
- foreach ((array) $httpMethod as $method) {
- foreach ($routeDatas as $routeData) {
- $this->dataGenerator->addRoute($method, $routeData, $handler);
- }
- }
- }
- /**
- * Create a route group with a common prefix.
- *
- * All routes created in the passed callback will have the given group prefix prepended.
- *
- * @param string $prefix
- * @param callable $callback
- */
- public function addGroup($prefix, callable $callback)
- {
- $previousGroupPrefix = $this->currentGroupPrefix;
- $this->currentGroupPrefix = $previousGroupPrefix . $prefix;
- $callback($this);
- $this->currentGroupPrefix = $previousGroupPrefix;
- }
- /**
- * Adds a GET route to the collection
- *
- * This is simply an alias of $this->addRoute('GET', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function get($route, $handler)
- {
- $this->addRoute('GET', $route, $handler);
- }
- /**
- * Adds a POST route to the collection
- *
- * This is simply an alias of $this->addRoute('POST', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function post($route, $handler)
- {
- $this->addRoute('POST', $route, $handler);
- }
- /**
- * Adds a PUT route to the collection
- *
- * This is simply an alias of $this->addRoute('PUT', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function put($route, $handler)
- {
- $this->addRoute('PUT', $route, $handler);
- }
- /**
- * Adds a DELETE route to the collection
- *
- * This is simply an alias of $this->addRoute('DELETE', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function delete($route, $handler)
- {
- $this->addRoute('DELETE', $route, $handler);
- }
- /**
- * Adds a PATCH route to the collection
- *
- * This is simply an alias of $this->addRoute('PATCH', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function patch($route, $handler)
- {
- $this->addRoute('PATCH', $route, $handler);
- }
- /**
- * Adds a HEAD route to the collection
- *
- * This is simply an alias of $this->addRoute('HEAD', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function head($route, $handler)
- {
- $this->addRoute('HEAD', $route, $handler);
- }
- /**
- * Returns the collected route data, as provided by the data generator.
- *
- * @return array
- */
- public function getData()
- {
- return $this->dataGenerator->getData();
- }
- }
|