webcron/lib/Framework/Router.php

57 lines
2.1 KiB
PHP
Raw Normal View History

2021-04-07 13:31:57 +02:00
<?php
namespace JeroenED\Framework;
use Symfony\Component\Config\FileLocator;
2021-04-13 14:44:58 +02:00
use Symfony\Component\Filesystem\Exception\InvalidArgumentException;
2021-04-07 13:31:57 +02:00
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
class Router
{
private RouteCollection $routes;
private RequestContext $requestContext;
public function route(Request $request, Kernel $kernel): Response
{
$requestContext = new RequestContext();
$this->requestContext = $requestContext->fromRequest($request);
$matcher = new UrlMatcher($this->routes, $this->requestContext);
$method = $matcher->match($request->getPathInfo());
$controller = explode('::', $method['_controller']);
$controllerObj = new ('\\' . $controller[0])($request, $kernel);
$action = $controller[1];
2021-04-08 14:54:30 +02:00
unset($method['_controller']);
unset($method['_route']);
$response = $controllerObj->$action(...$method);
2021-04-07 13:31:57 +02:00
if ($response instanceof Response) {
2022-02-01 14:29:19 +01:00
$response->headers->add([
2022-02-02 13:16:17 +01:00
"Content-Security-Policy" => "default-src 'none'; font-src 'self'; style-src 'self'; script-src 'self'; connect-src 'self'; img-src 'self' data:; form-action 'self'; require-trusted-types-for 'script'; frame-ancestors 'none'; base-uri 'none'",
"Referrer-Policy" => "same-origin"
2022-02-01 14:29:19 +01:00
]);
2021-04-07 13:31:57 +02:00
return $response;
} else {
throw new InvalidArgumentException();
}
}
public function parseRoutes(string $dir, string $file): void
{
$routeloader = new YamlFileLoader(new FileLocator($dir));
$this->routes = $routeloader->load($file);
}
public function getUrlForRoute(string $route, array $params = []): string
{
$matcher = new UrlGenerator($this->routes, $this->requestContext);
return $matcher->generate($route, $params, UrlGenerator::ABSOLUTE_URL);
}
}