You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
<?php
|
|
namespace App\Router\Middleware;
|
|
use App\Router\Request\IRequest;
|
|
use Shared\Validation\Validator;
|
|
|
|
class RequestValidationMiddleware extends Middleware {
|
|
private $validator;
|
|
private $rules;
|
|
|
|
public function __construct(Validator $validator, array $rules) {
|
|
$this->validator = $validator;
|
|
$this->rules = $rules;
|
|
}
|
|
|
|
public function handle(IRequest $request, callable $next) {
|
|
$this->validateRequest($request);
|
|
return parent::handle($request, $next);
|
|
}
|
|
|
|
private function validateRequest(IRequest $request) {
|
|
foreach ($this->rules as $param => $ruleSet) {
|
|
foreach ($ruleSet as $rule) {
|
|
$this->validator->rule($param, $rule['callback'], $rule['message']);
|
|
}
|
|
}
|
|
|
|
$requestData = array_merge($request->getQueryParameters(), $request->getRequestParameters());
|
|
$this->validator->assert($requestData);
|
|
}
|
|
|
|
}
|
|
|
|
// $validationRules = [
|
|
// 'email' => [
|
|
// ['callback' => Validator::required(), 'message' => 'Email is required.'],
|
|
// ['callback' => Validator::email(), 'message' => 'Email must be a valid email address.']
|
|
// ],
|
|
// // Add more rules as needed
|
|
// ];
|