use Data namespace
This commit is contained in:
parent
71d49def6b
commit
a5b80681c9
21 changed files with 283 additions and 68 deletions
|
|
@ -2,8 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Icefox\DTO\Attributes;
|
||||
|
||||
namespace Icefox\Data\Attributes;
|
||||
use Attribute;
|
||||
|
||||
#[Attribute(Attribute::TARGET_PARAMETER)]
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Icefox\DTO\Attributes;
|
||||
namespace Icefox\Data\Attributes;
|
||||
|
||||
use Attribute;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Icefox\DTO\Attributes;
|
||||
namespace Icefox\Data\Attributes;
|
||||
|
||||
use Attribute;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Icefox\DTO\Attributes;
|
||||
namespace Icefox\Data\Attributes;
|
||||
|
||||
use Attribute;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Icefox\DTO\Attributes;
|
||||
namespace Icefox\Data\Attributes;
|
||||
|
||||
use Attribute;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
5
src/IData.php
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?php
|
||||
|
||||
namespace Icefox\Data;
|
||||
|
||||
interface IData {}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace Icefox\DTO;
|
||||
|
||||
interface IDataObject {}
|
||||
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Icefox\DTO;
|
||||
namespace Icefox\Data;
|
||||
|
||||
use ReflectionParameter;
|
||||
use phpDocumentor\Reflection\DocBlock\Tags\Param;
|
||||
|
|
|
|||
|
|
@ -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']));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace Icefox\DTO;
|
||||
namespace Icefox\Data;
|
||||
|
||||
use ReflectionNamedType;
|
||||
use ReflectionParameter;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue