The Base Data Class
TheData class you’ve been using is actually a composition of multiple traits and interfaces:
Available Traits and Interfaces
Each interface and corresponding trait provides specific functionality:BaseData
BaseData
Provides the base functionality to create data objects.Interface:
Trait:
Spatie\LaravelData\Contracts\BaseDataTrait:
Spatie\LaravelData\Concerns\BaseDataThis is the core functionality that enables:- Creating data objects from various sources
- The
from()method - Magic creation methods
BaseDataCollectable
BaseDataCollectable
Provides base functionality to create data collections.Interface:
Trait:
Spatie\LaravelData\Contracts\BaseDataCollectableTrait:
Spatie\LaravelData\Concerns\BaseDataCollectableEnables collection operations for data objects.ContextableData
ContextableData
Provides context functionality for includes and wraps.Trait:
Spatie\LaravelData\Concerns\ContextableDataManages transformation context like includes, excludes, wraps, etc.IncludeableData
IncludeableData
Provides functionality to add includes, excludes, only, and except.Interface:
Trait:
Spatie\LaravelData\Contracts\IncludeableDataTrait:
Spatie\LaravelData\Concerns\IncludeableDataEnables:->include('property')->exclude('property')->only('property')->except('property')
TransformableData
TransformableData
Provides functionality to transform data objects.Interface:
Trait:
Spatie\LaravelData\Contracts\TransformableDataTrait:
Spatie\LaravelData\Concerns\TransformableDataEnables:->toArray()->toJson()- Transformation to various formats
ResponsableData
ResponsableData
Provides functionality to return data objects as HTTP responses.Interface:
Trait:
Spatie\LaravelData\Contracts\ResponsableDataTrait:
Spatie\LaravelData\Concerns\ResponsableDataAllows returning data objects directly from controllers.WrappableData
WrappableData
Provides functionality to wrap transformed data.Interface:
Trait:
Spatie\LaravelData\Contracts\WrappableDataTrait:
Spatie\LaravelData\Concerns\WrappableDataEnables:->wrap('data')- Custom wrapping keys
AppendableData
AppendableData
Provides functionality to append data to transformed payloads.Interface:
Trait:
Spatie\LaravelData\Contracts\AppendableDataTrait:
Spatie\LaravelData\Concerns\AppendableDataEnables:->additional(['key' => 'value'])- Appending extra data to responses
EmptyData
EmptyData
Provides functionality to get an empty version of the data object.Interface:
Trait:
Spatie\LaravelData\Contracts\EmptyDataTrait:
Spatie\LaravelData\Concerns\EmptyDataEnables:::empty()- Creating empty data objects
ValidateableData
ValidateableData
Provides functionality to validate data objects.Interface:
Trait:
Spatie\LaravelData\Contracts\ValidateableDataTrait:
Spatie\LaravelData\Concerns\ValidateableDataEnables:::validate($data)::getValidationRules($data)- Automatic validation
DeprecatableData
DeprecatableData
Provides functionality for deprecated features.Interface:
Trait:
Spatie\LaravelData\Contracts\DeprecatableDataTrait:
Spatie\LaravelData\Concerns\DeprecatableDataSupports backward compatibility features.Creating Custom Base Classes
You can create your own base data classes with specific functionality:Example: Minimal Data Class
Create a data class with only creation and transformation:Example: API Resource Class
Create a data class optimized for API resources:Example: DTO Class
Create a data class for DTOs without HTTP concerns:Built-in Custom Classes
The package includes two custom base classes:- Resource - Optimized for API resources with transformation and response features
- Dto - Optimized for data transfer objects with validation