add validator, error handler
This commit is contained in:
parent
dbbf3b8f4f
commit
fc391879d0
30
context.php
30
context.php
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once __DIR__ . '/session.php';
|
require_once __DIR__ . '/session.php';
|
||||||
|
require_once __DIR__ . '/validator.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context holds the request, response, and shared state for a request
|
* Context holds the request, response, and shared state for a request
|
||||||
@ -97,4 +98,33 @@ class Context
|
|||||||
$this->text($message, $status);
|
$this->text($message, $status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* validate validates input data against rules
|
||||||
|
*/
|
||||||
|
public function validate(array $data, array $rules, array $messages = []): Validator
|
||||||
|
{
|
||||||
|
$validator = new Validator();
|
||||||
|
$validator->validate($data, $rules, $messages);
|
||||||
|
|
||||||
|
if ($validator->failed()) {
|
||||||
|
throw new ValidationException($validator->errors());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* validateRequest validates request data against rules
|
||||||
|
*/
|
||||||
|
public function validateRequest(array $rules, array $messages = []): Validator
|
||||||
|
{
|
||||||
|
$data = array_merge(
|
||||||
|
$this->request->query,
|
||||||
|
$this->request->body,
|
||||||
|
$this->request->params
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this->validate($data, $rules, $messages);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
24
web.php
24
web.php
@ -5,6 +5,7 @@ require_once __DIR__ . '/request.php';
|
|||||||
require_once __DIR__ . '/response.php';
|
require_once __DIR__ . '/response.php';
|
||||||
require_once __DIR__ . '/context.php';
|
require_once __DIR__ . '/context.php';
|
||||||
require_once __DIR__ . '/router.php';
|
require_once __DIR__ . '/router.php';
|
||||||
|
require_once __DIR__ . '/errorhandler.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web is the application controller itself
|
* Web is the application controller itself
|
||||||
@ -14,10 +15,12 @@ class Web
|
|||||||
private Router $router;
|
private Router $router;
|
||||||
private array $middleware = [];
|
private array $middleware = [];
|
||||||
private Context $context;
|
private Context $context;
|
||||||
|
private ErrorHandler $errorHandler;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(bool $debug = false)
|
||||||
{
|
{
|
||||||
$this->router = new Router();
|
$this->router = new Router();
|
||||||
|
$this->errorHandler = new ErrorHandler($debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function use(callable $middleware): self
|
public function use(callable $middleware): self
|
||||||
@ -84,6 +87,18 @@ class Web
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setErrorHandler(int $status, callable $handler): self
|
||||||
|
{
|
||||||
|
$this->errorHandler->register($status, $handler);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDefaultErrorHandler(callable $handler): self
|
||||||
|
{
|
||||||
|
$this->errorHandler->setDefaultHandler($handler);
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
private function addGroupRoutes(Router $router, string $prefix, string $path, mixed $node, string $currentPath = ''): void
|
private function addGroupRoutes(Router $router, string $prefix, string $path, mixed $node, string $currentPath = ''): void
|
||||||
{
|
{
|
||||||
if ($path !== '') $currentPath = $currentPath ? "$currentPath/$path" : $path;
|
if ($path !== '') $currentPath = $currentPath ? "$currentPath/$path" : $path;
|
||||||
@ -113,12 +128,12 @@ class Web
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($result['code'] === 404) {
|
if ($result['code'] === 404) {
|
||||||
$this->context->error(404);
|
$this->errorHandler->handle($this->context, 404);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($result['code'] === 405) {
|
if ($result['code'] === 405) {
|
||||||
$this->context->error(405);
|
$this->errorHandler->handle($this->context, 405);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,8 +166,7 @@ class Web
|
|||||||
|
|
||||||
$chain();
|
$chain();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
error_log($e->getMessage());
|
$this->errorHandler->handleException($this->context, $e);
|
||||||
$this->context->error(500, 'Internal Server Error');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user