use Data namespace

This commit is contained in:
icefox 2026-03-07 11:27:12 -03:00
parent 71d49def6b
commit a5b80681c9
No known key found for this signature in database
21 changed files with 283 additions and 68 deletions

View file

@ -2,8 +2,7 @@
declare(strict_types=1);
namespace Icefox\DTO\Attributes;
namespace Icefox\Data\Attributes;
use Attribute;
#[Attribute(Attribute::TARGET_PARAMETER)]

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Icefox\DTO\Attributes;
namespace Icefox\Data\Attributes;
use Attribute;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Icefox\DTO\Attributes;
namespace Icefox\Data\Attributes;
use Attribute;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Icefox\DTO\Attributes;
namespace Icefox\Data\Attributes;
use Attribute;

View file

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Icefox\DTO\Attributes;
namespace Icefox\Data\Attributes;
use Attribute;

View file

@ -1,8 +1,8 @@
<?php
namespace Icefox\DTO;
namespace Icefox\Data;
use Icefox\DTO\Factories\RuleFactory;
use Icefox\Data\Factories\RuleFactory;
use phpDocumentor\Reflection\PseudoTypes\Generic;
class CustomHandlers

View file

@ -2,9 +2,9 @@
declare(strict_types=1);
namespace Icefox\DTO;
namespace Icefox\Data;
use Icefox\DTO\Factories\DataObjectFactory;
use Icefox\Data\Factories\DataObjectFactory;
use Illuminate\Http\Request;
trait DataObject

View file

@ -1,12 +1,12 @@
<?php
namespace Icefox\DTO\Factories;
namespace Icefox\Data\Factories;
use Icefox\DTO\Attributes\FromInput;
use Icefox\DTO\Attributes\FromRouteParameter;
use Icefox\DTO\Factories\RuleFactory;
use Icefox\DTO\Factories\ValueFactory;
use Icefox\DTO\ReflectionHelper;
use Icefox\Data\Attributes\FromInput;
use Icefox\Data\Attributes\FromRouteParameter;
use Icefox\Data\Factories\RuleFactory;
use Icefox\Data\Factories\ValueFactory;
use Icefox\Data\ReflectionHelper;
use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Illuminate\Support\Facades\App;
@ -15,7 +15,6 @@ use Illuminate\Validation\ValidationException;
use Illuminate\Validation\Validator;
use Psr\Log\LoggerInterface;
use ReflectionNamedType;
use phpDocumentor\Reflection\Types\AbstractList;
class DataObjectFactory
{
@ -37,7 +36,13 @@ class DataObjectFactory
public static function fromArray(string $class, array $rawInput, array $routeParameters): ?object
{
$logger = Log::channel('dto');
$input = self::mapInput($class, $rawInput, $routeParameters, $logger);
$defaults = method_exists($class, 'defaults')
? App::call("$class::defaults")
: [];
$mergedInput = array_replace_recursive($defaults, $rawInput);
$input = self::mapInput($class, $mergedInput, $routeParameters, $logger);
$rules = (new RuleFactory($logger))->make($class);
@ -104,13 +109,19 @@ class DataObjectFactory
}
if ($valueType = ReflectionHelper::getListParameterValueType($parameter->tag)) {
$input[$parameterName] = $isListType
? array_map(
fn($element) => self::mapInput($valueType, $element, $routeParameters, $logger),
$rawInput[$parameterName],
)
: self::mapInput($valueType, $rawInput[$parameterName], $routeParameters, $logger);
continue;
if (class_exists($valueType)) {
$input[$parameterName] = $isListType
? array_map(
fn($element) => self::mapInput($valueType, $element, $routeParameters, $logger),
$rawInput[$parameterName],
)
: self::mapInput($valueType, $rawInput[$parameterName], $routeParameters, $logger);
continue;
}
if (array_key_exists($parameterName, $rawInput)) {
$input[$parameterName] = $rawInput[$parameterName];
continue;
}
}
if ($reflectionType instanceof ReflectionNamedType) {

View file

@ -2,13 +2,13 @@
declare(strict_types=1);
namespace Icefox\DTO\Factories;
namespace Icefox\Data\Factories;
use Icefox\DTO\Attributes\Flat;
use Icefox\DTO\Attributes\Overwrite;
use Icefox\DTO\ParameterMeta;
use Icefox\DTO\ReflectionHelper;
use Icefox\DTO\Factories\RuleFactory;
use Icefox\Data\Attributes\Flat;
use Icefox\Data\Attributes\Overwrite;
use Icefox\Data\ParameterMeta;
use Icefox\Data\ReflectionHelper;
use Icefox\Data\Factories\RuleFactory;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;

View file

@ -2,11 +2,11 @@
declare(strict_types=1);
namespace Icefox\DTO\Factories;
namespace Icefox\Data\Factories;
use Icefox\DTO\Attributes\CastWith;
use Icefox\DTO\Attributes\Flat;
use Icefox\DTO\ReflectionHelper;
use Icefox\Data\Attributes\CastWith;
use Icefox\Data\Attributes\Flat;
use Icefox\Data\ReflectionHelper;
use Illuminate\Support\Facades\App;
use ReflectionNamedType;
use phpDocumentor\Reflection\PseudoTypes\Generic;

5
src/IData.php Normal file
View file

@ -0,0 +1,5 @@
<?php
namespace Icefox\Data;
interface IData {}

View file

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

View file

@ -1,6 +1,6 @@
<?php
namespace Icefox\DTO;
namespace Icefox\Data;
use ReflectionParameter;
use phpDocumentor\Reflection\DocBlock\Tags\Param;

View file

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

View file

@ -1,6 +1,6 @@
<?php
namespace Icefox\DTO;
namespace Icefox\Data;
use ReflectionNamedType;
use ReflectionParameter;