57 lines
1.5 KiB
PHP
57 lines
1.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Slim Framework (https://slimframework.com)
|
|
*
|
|
* @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Slim\Routing;
|
|
|
|
use RuntimeException;
|
|
use Slim\Interfaces\DispatcherInterface;
|
|
use Slim\Interfaces\RouteCollectorInterface;
|
|
use Slim\Interfaces\RouteInterface;
|
|
use Slim\Interfaces\RouteResolverInterface;
|
|
|
|
use function rawurldecode;
|
|
|
|
/**
|
|
* RouteResolver instantiates the FastRoute dispatcher
|
|
* and computes the routing results of a given URI and request method
|
|
*/
|
|
class RouteResolver implements RouteResolverInterface
|
|
{
|
|
protected RouteCollectorInterface $routeCollector;
|
|
|
|
private DispatcherInterface $dispatcher;
|
|
|
|
public function __construct(RouteCollectorInterface $routeCollector, ?DispatcherInterface $dispatcher = null)
|
|
{
|
|
$this->routeCollector = $routeCollector;
|
|
$this->dispatcher = $dispatcher ?? new Dispatcher($routeCollector);
|
|
}
|
|
|
|
/**
|
|
* @param string $uri Should be $request->getUri()->getPath()
|
|
*/
|
|
public function computeRoutingResults(string $uri, string $method): RoutingResults
|
|
{
|
|
$uri = rawurldecode($uri);
|
|
if ($uri === '' || $uri[0] !== '/') {
|
|
$uri = '/' . $uri;
|
|
}
|
|
return $this->dispatcher->dispatch($method, $uri);
|
|
}
|
|
|
|
/**
|
|
* @throws RuntimeException
|
|
*/
|
|
public function resolveRoute(string $identifier): RouteInterface
|
|
{
|
|
return $this->routeCollector->lookupRoute($identifier);
|
|
}
|
|
}
|