This commit is contained in:
2021-03-16 14:37:52 +08:00
parent 9a22a92410
commit d925ca19bb
4 changed files with 39 additions and 25 deletions
+17 -16
View File
@@ -56,23 +56,20 @@ class OnRequest extends Callback
public function onHandler(Request $request, Response $response): mixed
{
try {
$this->event->trigger(self::BEFORE_REQUEST, [$request]);
/** @var HRequest $request */
[$request, $response] = OnRequest::createContext($request, $response);
[$request, $response] = static::create($request, $response);
if (!$request->is('favicon.ico')) {
return \router()->dispatch();
}
$this->event->dispatch(self::BEFORE_REQUEST, [$request]);
return \send(null);
$result = $request->dispatch();
$this->event->dispatch(self::AFTER_REQUEST, [$request, $result]);
return $result;
} catch (ExitException | Error | \Throwable $exception) {
if ($exception instanceof ExitException) {
return \send(Json::to($exception->getCode(), $exception->getMessage()));
}
return $this->sendErrorMessage($request, $response, $exception);
} finally {
$this->event->trigger(Event::SYSTEM_RESOURCE_RELEASES);
$this->event->trigger(self::AFTER_REQUEST, [$request]);
$this->logger->insert();
}
}
@@ -85,7 +82,7 @@ class OnRequest extends Callback
* @throws NotFindClassException
* @throws ReflectionException
*/
public static function create($request, $response): array
public static function createContext($request, $response): array
{
return [HRequest::create($request), HResponse::create($response)];
}
@@ -96,13 +93,13 @@ class OnRequest extends Callback
* @param $sResponse
* @param $exception
* @return bool|string
* @throws ComponentException
* @throws Exception
*/
protected function sendErrorMessage($sRequest, $sResponse, $exception): bool|string
{
$this->error($exception);
$params = Snowflake::app()->getLogger()->exception($exception);
$this->error($exception->getMessage());
$this->event->dispatch(self::AFTER_REQUEST, [$sRequest, $exception]);
if ($sResponse instanceof Response) {
[$sRequest, $sResponse] = [HRequest::create($sRequest), HResponse::create($sResponse)];
}
@@ -111,7 +108,11 @@ class OnRequest extends Callback
$sResponse->addHeader('Access-Control-Allow-Headers', $sRequest->headers->get('access-control-request-headers'));
$sResponse->addHeader('Access-Control-Request-Method', $sRequest->headers->get('access-control-request-method'));
return $sResponse->send($params, 200);
if (!($exception instanceof ExitException)) {
return $sResponse->send(\logger()->exception($exception), 200);
} else {
return $sResponse->send($exception->getMessage(), 200);
}
}
}
+12
View File
@@ -8,6 +8,7 @@ use Exception;
use HttpServer\Abstracts\HttpService;
use HttpServer\IInterface\AuthIdentity;
use HttpServer\Route\Router;
use JetBrains\PhpStorm\Pure;
use ReflectionException;
use Snowflake\Core\ArrayAccess;
@@ -15,6 +16,7 @@ use Snowflake\Core\Json;
use Snowflake\Exception\ComponentException;
use Snowflake\Exception\NotFindClassException;
use Snowflake\Snowflake;
use stdClass;
use Swoole\Server;
use function router;
@@ -437,6 +439,16 @@ class Request extends HttpService
}
/**
* @return mixed
* @throws Exception
*/
public function dispatch(): mixed
{
return $this->is('favicon.ico') ? \send(null) : \router();
}
/**
* @param $request
* @return mixed
+8 -7
View File
@@ -177,12 +177,13 @@ class Event extends BaseObject
}
/**
* @param $name
* @param array $params
* @param null $scope
* @return bool
*/
/**
* @param $name
* @param array $params
* @param null $scope
* @return bool
* @throws Exception
*/
public function dispatch($name, $params = [], $scope = null): bool
{
return $this->trigger($name, $params, $scope);
@@ -219,7 +220,7 @@ class Event extends BaseObject
* @return bool
* @throws Exception
*/
private function execute($event, $parameter)
private function execute($event, $parameter): bool
{
try {
$meta = $this->mergeParams($event[1], $parameter);
+2 -2
View File
@@ -592,10 +592,10 @@ if (!function_exists('send')) {
/**
* @param $context
* @param $statusCode
* @return bool|Response|stdClass|string
* @return mixed
* @throws Exception
*/
function send($context, $statusCode = 404): Response|bool|string|stdClass
function send($context, $statusCode = 404): mixed
{
return \response()->send($context, $statusCode);
}