forked from qwerty/milfs
153 lines
3.8 KiB
PHP
153 lines
3.8 KiB
PHP
|
<?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();
|
||
|
}
|
||
|
}
|