http tests

This commit is contained in:
icefox 2026-02-27 11:14:42 -03:00
parent b827038df3
commit 30706c3521
No known key found for this signature in database
8 changed files with 216 additions and 214 deletions

View file

@ -9,7 +9,7 @@ use Illuminate\Http\Request;
trait DataObject
{
public static function fromRequest(Request $request): mixed
public static function fromRequest(Request $request): ?static
{
return DataObjectFactory::fromRequest(static::class, $request);
}

View file

@ -118,14 +118,18 @@ class DataObjectFactory
}
if ($reflectionType instanceof ReflectionNamedType) {
$input[$parameterName] = $reflectionType->isBuiltin()
? $rawInput[$parameterName]
: self::mapInput($reflectionType->__toString(), $rawInput[$parameterName], $routeParameters, $logger);
if ($reflectionType->isBuiltin()) {
if (array_key_exists($parameterName, $rawInput)) {
$input[$parameterName] = $rawInput[$parameterName];
}
} else {
$input[$parameterName] = self::mapInput($reflectionType->__toString(), $rawInput[$parameterName], $routeParameters, $logger);
}
continue;
}
$input[$parameterName] = $rawInput[$parameterName];
if (array_key_exists($parameterName, $rawInput)) {
$input[$parameterName] = $rawInput[$parameterName];
}
}
$logger->debug('input', $input);
return $input;

View file

@ -137,6 +137,6 @@ class ValueFactory
$arguments[$name] = $parameterArgs;
}
return App::makeWith($class, $arguments);
return new $class(...$arguments);
}
}

6
src/IDataObject.php Normal file
View file

@ -0,0 +1,6 @@
<?php
namespace Icefox\DTO;
interface IDataObject {}

View file

@ -0,0 +1,23 @@
<?php
namespace Icefox\DTO\Providers;
use Icefox\DTO\Factories\DataObjectFactory;
use Icefox\DTO\IDataObject;
use Illuminate\Support\ServiceProvider;
class DataObjectServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->beforeResolving(function ($abstract, $parameters, $app) {
if ($app->has($abstract)) {
return;
}
if (is_subclass_of($abstract, IDataObject::class)) {
$app->bind($abstract, fn($container) => DataObjectFactory::fromRequest($abstract, $container['request']));
}
});
}
}