for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Furious\Router;
use Furious\Router\Collection\RouteCollection;
use Furious\Router\Exception\RequestNotMatchedException;
use Furious\Router\Exception\UnableToFoundRouteException;
use Furious\Router\Match\RouteMatch;
use Furious\Router\Route\RouteInterface;
use Psr\Http\Message\ServerRequestInterface;
class Router implements RouterInterface
{
private RouteCollection $routes;
/**
* Router constructor.
* @param RouteCollection $routes
*/
public function __construct(RouteCollection $routes)
$this->routes = $routes;
}
* @return RouteCollection
public function getRouteCollection(): RouteCollection
return $this->routes;
public function generate(string $name, array $params = []): string
$routes = $this->routes->getRoutes();
foreach ($routes as $route) {
$url = $route->generate($name, array_filter($params));
if (null !== $url) {
return $url;
throw new UnableToFoundRouteException($name, $params);
public function match(ServerRequestInterface $request): RouteMatch
if ($result = $route->match($request)) {
return $result;
throw new RequestNotMatchedException($request);
public function addRoute(RouteInterface $route): void
$this->routes->add($route);