UPDATE: Fix methods of return.
This commit is contained in:
parent
a5d559d76c
commit
16391b387d
|
|
@ -8,6 +8,7 @@ use Nyholm\Psr7\Response;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
use App\Controllers\ReportController;
|
use App\Controllers\ReportController;
|
||||||
|
use Nyholm\Psr7Server\ServerRequestCreatorInterface;
|
||||||
|
|
||||||
class Router
|
class Router
|
||||||
{
|
{
|
||||||
|
|
@ -30,12 +31,18 @@ class Router
|
||||||
return $this->routes;
|
return $this->routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getQueryParams(ServerRequestInterface $serverRequest)
|
||||||
|
{
|
||||||
|
return $serverRequest->getQueryParams();
|
||||||
|
}
|
||||||
|
|
||||||
public function checkIfRouteExists($uri, $method, $controller, $action) {}
|
public function checkIfRouteExists($uri, $method, $controller, $action) {}
|
||||||
|
|
||||||
public function dispatcher(ServerRequestInterface $request)
|
public function dispatcher(ServerRequestInterface $request)
|
||||||
{
|
{
|
||||||
$uri = $request->getUri()->getPath();
|
$uri = $request->getUri()->getPath();
|
||||||
$method = $request->getMethod();
|
$method = $request->getMethod();
|
||||||
|
$queryParams = $this->getQueryParams($request);
|
||||||
|
|
||||||
foreach ($this->routes as $route) {
|
foreach ($this->routes as $route) {
|
||||||
// Converte a URI da rota para um padrão RegEx para capturar parâmetros
|
// Converte a URI da rota para um padrão RegEx para capturar parâmetros
|
||||||
|
|
@ -48,7 +55,7 @@ class Router
|
||||||
// Se a URI bateu, agora verifica o método HTTP
|
// Se a URI bateu, agora verifica o método HTTP
|
||||||
if ($method !== $route['method']) {
|
if ($method !== $route['method']) {
|
||||||
// URI correta, método errado -> Erro 405
|
// URI correta, método errado -> Erro 405
|
||||||
return new Response(405, ['Allow' => $route['method']], 'Method Not Allowed');
|
return new Response(405, ['Allow' => $route['method'], 'Content-Type' => 'application/json'], json_encode(['error' => 'Recurso não foi encontrado']));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove o primeiro elemento de $matches, que é a URI completa
|
// Remove o primeiro elemento de $matches, que é a URI completa
|
||||||
|
|
@ -61,19 +68,22 @@ class Router
|
||||||
|
|
||||||
// Verifica se a classe do controller existe
|
// Verifica se a classe do controller existe
|
||||||
if (!class_exists($controllerClass)) {
|
if (!class_exists($controllerClass)) {
|
||||||
return new Response(500, [], 'Controller not found');
|
return new Response(500, ['Content-Type' => 'application/json', 'Accept' => 'application/json'], json_encode(['error' => 'Recurso não foi encontrado']));
|
||||||
}
|
}
|
||||||
|
|
||||||
$controllerInstance = new $controllerClass();
|
$controllerInstance = new $controllerClass();
|
||||||
|
|
||||||
|
if (empty($queryParams)) {
|
||||||
|
return new Response(403, ['Content-Type' => 'application/json', 'Accept' => 'application/json'], json_encode(['error' => 'O parâmetro de data não foi enviado.']));
|
||||||
|
}
|
||||||
|
|
||||||
// Chama a action e passa a requisição e os parâmetros
|
// Chama a action e passa a requisição e os parâmetros
|
||||||
// Ex: $meuController->show($request, '123');
|
// Ex: $meuController->show($request, '123');
|
||||||
return $controllerInstance->$action($request, ...$params);
|
return $controllerInstance->$action($request, $queryParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Se o loop terminar e nenhuma rota for encontrada -> Erro 404
|
// Se o loop terminar e nenhuma rota for encontrada -> Erro 404
|
||||||
return new Response(404, [], 'Not Found');
|
return new Response(404, ['Content-Type' => 'application/json'], json_encode(['error' => 'Rota inexistente']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue