This commit is contained in:
xl
2023-11-10 15:19:51 +08:00
parent 435ddb4d42
commit 09dbd77d55
+15
View File
@@ -3,10 +3,12 @@ declare(strict_types=1);
namespace Kiri\Router\Validator; namespace Kiri\Router\Validator;
use Kiri;
use Kiri\Router\Constrict\ConstrictRequest; use Kiri\Router\Constrict\ConstrictRequest;
use Kiri\Router\Interface\ValidatorInterface; use Kiri\Router\Interface\ValidatorInterface;
use Psr\Http\Message\RequestInterface; use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
use ReflectionException;
/** /**
@@ -68,6 +70,7 @@ class Validator
/** /**
* @param RequestInterface|ServerRequestInterface|ConstrictRequest $request * @param RequestInterface|ServerRequestInterface|ConstrictRequest $request
* @return bool * @return bool
* @throws ReflectionException
*/ */
public function run(RequestInterface|ServerRequestInterface|ConstrictRequest $request): bool public function run(RequestInterface|ServerRequestInterface|ConstrictRequest $request): bool
{ {
@@ -75,6 +78,7 @@ class Validator
return false; return false;
} }
$params = !$request->getIsPost() ? $request->getQueryParams() : $request->getParsedBody(); $params = !$request->getIsPost() ? $request->getQueryParams() : $request->getParsedBody();
$method = Kiri::getDi()->getReflectionClass($this->formData::class);
foreach ($this->rules as $name => $rule) { foreach ($this->rules as $name => $rule) {
$value = $params[$name] ?? null; $value = $params[$name] ?? null;
foreach ($rule as $item) { foreach ($rule as $item) {
@@ -83,6 +87,17 @@ class Validator
return $this->addError($name); return $this->addError($name);
} }
} }
$property = $method->getProperty($name);
if (!($property->getType() instanceof \ReflectionUnionType)) {
$value = match ($property->getType()?->getName()) {
'int' => (int)$value,
'float' => (float)$value,
default => $value
};
}
if ($value === 'Null') {
$value = null;
}
$this->formData->{$name} = $value; $this->formData->{$name} = $value;
} }
return true; return true;