File "TransformableData.php"
Full Path: /var/www/html/back/vendor/spatie/laravel-data/src/Concerns/TransformableData.php
File size: 2.59 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace Spatie\LaravelData\Concerns;
use Exception;
use Spatie\LaravelData\Contracts\BaseData as BaseDataContract;
use Spatie\LaravelData\Contracts\BaseDataCollectable as BaseDataCollectableContract;
use Spatie\LaravelData\Contracts\ContextableData as ContextableDataContract;
use Spatie\LaravelData\Contracts\IncludeableData as IncludeableDataContract;
use Spatie\LaravelData\Support\DataContainer;
use Spatie\LaravelData\Support\EloquentCasts\DataEloquentCast;
use Spatie\LaravelData\Support\Transformation\TransformationContext;
use Spatie\LaravelData\Support\Transformation\TransformationContextFactory;
trait TransformableData
{
/** @return array<string, mixed> */
public function transform(
null|TransformationContextFactory|TransformationContext $transformationContext = null,
): array {
$transformationContext = match (true) {
$transformationContext instanceof TransformationContext => $transformationContext,
$transformationContext instanceof TransformationContextFactory => $transformationContext->get($this),
$transformationContext === null => new TransformationContext(
maxDepth: config('data.max_transformation_depth'),
throwWhenMaxDepthReached: config('data.throw_when_max_transformation_depth_reached')
)
};
$resolver = match (true) {
$this instanceof BaseDataContract => DataContainer::get()->transformedDataResolver(),
$this instanceof BaseDataCollectableContract => DataContainer::get()->transformedDataCollectableResolver(),
default => throw new Exception('Cannot transform data object')
};
if ($this instanceof IncludeableDataContract && $this instanceof ContextableDataContract) {
$transformationContext->mergePartialsFromDataContext($this);
}
return $resolver->execute($this, $transformationContext);
}
/** @return array<array-key, mixed> */
public function all(): array
{
return $this->transform(TransformationContextFactory::create()->withValueTransformation(false));
}
/** @return array<array-key, mixed> */
public function toArray(): array
{
return $this->transform();
}
public function toJson($options = 0): string
{
return json_encode($this->transform(), $options);
}
/** @return array<array-key, mixed> */
public function jsonSerialize(): array
{
return $this->transform();
}
public static function castUsing(array $arguments)
{
return new DataEloquentCast(static::class, $arguments);
}
}