AutorÃa | Ultima modificación | Ver Log |
<?phpnamespace FastRoute\Dispatcher;use FastRoute\Dispatcher;abstract class RegexBasedAbstract implements Dispatcher{/** @var mixed[][] */protected $staticRouteMap = [];/** @var mixed[] */protected $variableRouteData = [];/*** @return mixed[]*/abstract protected function dispatchVariableRoute($routeData, $uri);public function dispatch($httpMethod, $uri){if (isset($this->staticRouteMap[$httpMethod][$uri])) {$handler = $this->staticRouteMap[$httpMethod][$uri];return [self::FOUND, $handler, []];}$varRouteData = $this->variableRouteData;if (isset($varRouteData[$httpMethod])) {$result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri);if ($result[0] === self::FOUND) {return $result;}}// For HEAD requests, attempt fallback to GETif ($httpMethod === 'HEAD') {if (isset($this->staticRouteMap['GET'][$uri])) {$handler = $this->staticRouteMap['GET'][$uri];return [self::FOUND, $handler, []];}if (isset($varRouteData['GET'])) {$result = $this->dispatchVariableRoute($varRouteData['GET'], $uri);if ($result[0] === self::FOUND) {return $result;}}}// If nothing else matches, try fallback routesif (isset($this->staticRouteMap['*'][$uri])) {$handler = $this->staticRouteMap['*'][$uri];return [self::FOUND, $handler, []];}if (isset($varRouteData['*'])) {$result = $this->dispatchVariableRoute($varRouteData['*'], $uri);if ($result[0] === self::FOUND) {return $result;}}// Find allowed methods for this URI by matching against all other HTTP methods as well$allowedMethods = [];foreach ($this->staticRouteMap as $method => $uriMap) {if ($method !== $httpMethod && isset($uriMap[$uri])) {$allowedMethods[] = $method;}}foreach ($varRouteData as $method => $routeData) {if ($method === $httpMethod) {continue;}$result = $this->dispatchVariableRoute($routeData, $uri);if ($result[0] === self::FOUND) {$allowedMethods[] = $method;}}// If there are no allowed methods the route simply does not existif ($allowedMethods) {return [self::METHOD_NOT_ALLOWED, $allowedMethods];}return [self::NOT_FOUND];}}