♻️ Replace App\Model with App\Data
This commit is contained in:
parent
70e4404c22
commit
7f4f005302
12 changed files with 393 additions and 222 deletions
48
app/Data/Data.php
Normal file
48
app/Data/Data.php
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Data;
|
||||
|
||||
use Spatie\LaravelData\Data as BaseData;
|
||||
use Spatie\LaravelData\Support\DataConfig;
|
||||
use Spatie\LaravelData\Support\DataProperty;
|
||||
use Spatie\LaravelData\DataPipeline;
|
||||
use Spatie\LaravelData\DataPipes\AuthorizedDataPipe;
|
||||
use Spatie\LaravelData\DataPipes\CastPropertiesDataPipe;
|
||||
use Spatie\LaravelData\DataPipes\MapPropertiesDataPipe;
|
||||
use Spatie\LaravelData\DataPipes\ValidatePropertiesDataPipe;
|
||||
|
||||
abstract class Data extends BaseData
|
||||
{
|
||||
public static function fillPipeline(): DataPipeline
|
||||
{
|
||||
return DataPipeline::create()
|
||||
->into(static::class)
|
||||
->through(AuthorizedDataPipe::class)
|
||||
->through(MapPropertiesDataPipe::class)
|
||||
->through(ValidatePropertiesDataPipe::class)
|
||||
->through(CastPropertiesDataPipe::class);
|
||||
}
|
||||
|
||||
public function fill(iterable $payload): static
|
||||
{
|
||||
$pipeline = static::fillPipeline();
|
||||
|
||||
foreach (static::normalizers() as $normalizer) {
|
||||
$pipeline->normalizer($normalizer);
|
||||
}
|
||||
|
||||
$properties = $pipeline->using($payload)->execute();
|
||||
$dataClass = app(DataConfig::class)->getDataClass(static::class);
|
||||
|
||||
$dataClass
|
||||
->properties
|
||||
->filter(
|
||||
fn (DataProperty $property) => $properties->has($property->name)
|
||||
)
|
||||
->each(
|
||||
fn (DataProperty $property) => $this->{$property->name} = $properties->get($property->name)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue