q
This commit is contained in:
@@ -2,7 +2,42 @@
|
||||
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
class AbstractHandler
|
||||
use Kiri\Inject\Route\TestResponse;
|
||||
use Kiri\Router\Handler;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
abstract class AbstractHandler
|
||||
{
|
||||
|
||||
|
||||
public int $offset = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @param array $middlewares
|
||||
* @param Handler $handler
|
||||
*/
|
||||
public function __construct(public array $middlewares, public Handler $handler)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param ServerRequestInterface $request
|
||||
* @return ResponseInterface
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
public function execute(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
if (!isset($this->middlewares[$this->offset])) {
|
||||
return $this->handler->handle($request);
|
||||
}
|
||||
|
||||
$middleware = di($this->middlewares[$this->offset]);
|
||||
$this->offset += 1;
|
||||
|
||||
return $middleware->process($request);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
class ClosureController extends Controller
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
|
||||
use Kiri;
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
use Exception;
|
||||
use Kiri\Message\Handler\Abstracts\Middleware;
|
||||
use Kiri\Message\ServerRequest;
|
||||
use Kiri\Router\ServerRequest;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class CoreMiddleware extends Middleware
|
||||
class CoreMiddleware implements MiddlewareInterface
|
||||
{
|
||||
|
||||
|
||||
@@ -25,12 +25,11 @@ class CoreMiddleware extends Middleware
|
||||
*/
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||
{
|
||||
$requestMethod = $request->getAccessControlRequestMethod();
|
||||
$allowHeaders = $request->getAccessControlAllowHeaders();
|
||||
|
||||
$this->response->withAccessControlAllowOrigin('*')->withAccessControlRequestMethod($requestMethod)
|
||||
->withAccessControlAllowHeaders($allowHeaders);
|
||||
|
||||
/** @var ResponseInterface $response */
|
||||
$response = \Kiri::service()->get('response');
|
||||
$response->withHeader('Access-Control-Allow-Headers', $request->header('Access-Control-Allow-Headers'))
|
||||
->withHeader('Access-Control-Request-Method', $request->header('Access-Control-Allow-Origin'))
|
||||
->withHeader('Access-Control-Allow-Origin', $request->header('Access-Control-Allow-Headers'));
|
||||
return $handler->handle($request);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message\Abstracts;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
use Kiri\Annotation\Inject;
|
||||
use Kiri\Events\EventDispatch;
|
||||
|
||||
trait EventDispatchHelper
|
||||
{
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
|
||||
use Kiri\Message\Constrict\Response;
|
||||
use Kiri\Message\Constrict\ResponseInterface;
|
||||
use Kiri\Message\Abstracts\ExceptionHandlerInterface;
|
||||
use Kiri\Router\ContentType;
|
||||
use Kiri\Router\Interface\ExceptionHandlerInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Throwable;
|
||||
use Kiri\Router\Constrict\Stream;
|
||||
|
||||
|
||||
/**
|
||||
@@ -18,17 +19,17 @@ class ExceptionHandlerDispatcher implements ExceptionHandlerInterface
|
||||
|
||||
/**
|
||||
* @param Throwable $exception
|
||||
* @param Response $response
|
||||
* @param object $response
|
||||
* @return ResponseInterface
|
||||
*/
|
||||
public function emit(Throwable $exception, Response $response): ResponseInterface
|
||||
public function emit(Throwable $exception, object $response): ResponseInterface
|
||||
{
|
||||
$response->withContentType(ContentType::HTML);
|
||||
$response->withContentType(ContentType::HTML)->withBody(new Stream(jTraceEx($exception, null, true)));
|
||||
if ($exception->getCode() == 404) {
|
||||
return $response->withBody(new Stream($exception->getMessage()))->withStatus(404);
|
||||
return $response->withStatus(404);
|
||||
} else {
|
||||
return $response->withStatus($exception->getCode() == 0 ? 500 : $exception->getCode());
|
||||
}
|
||||
return $response->withBody(new Stream(jTraceEx($exception, null, true)))
|
||||
->withStatus($exception->getCode() == 0 ? 500 : $exception->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
use Kiri\Message\Constrict\ResponseInterface;
|
||||
|
||||
|
||||
@@ -2,7 +2,47 @@
|
||||
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
use Exception;
|
||||
use Kiri\Core\HashMap;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
|
||||
class Middleware
|
||||
{
|
||||
|
||||
|
||||
public HashMap $map;
|
||||
|
||||
public HashMap $routeMap;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->routeMap = new HashMap();
|
||||
$this->map = new HashMap();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
* @param mixed $middleware
|
||||
* @return void
|
||||
* @throws Exception
|
||||
*/
|
||||
public function addPathMiddleware(string $path, string $middleware): void
|
||||
{
|
||||
if ($this->routeMap->has($path)) {
|
||||
$values = $this->routeMap->get($path);
|
||||
if (in_array($middleware, $values)) {
|
||||
return;
|
||||
}
|
||||
if (!in_array(MiddlewareInterface::class, class_implements($middleware))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
$this->routeMap->append($path, $middleware);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Message\Handler;
|
||||
namespace Kiri\Router\Base;
|
||||
|
||||
use Kiri\Message\Constrict\ResponseInterface;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user