Files
alfa-bank-sdk/_docs/laravel-libs/laravel-data/advanced-usage/normalizers.md

67 lines
1.9 KiB
Markdown

---
title: Normalizers
weight: 4
---
This package allows you to dynamically create data objects from any kind of object. For example, you can use an
eloquent model to create a data object like this:
```php
SongData::from(Song::findOrFail($id));
```
A `Normalizer` will take a payload like a model and will transform it into an array, so it can be used in the pipeline (see further).
By default, there are five normalizers:
- **ModelNormalizer** will cast eloquent models
- **ArrayableNormalizer** will cast `Arrayable`'s
- **ObjectNormalizer** will cast `stdObject`'s
- **ArrayNormalizer** will cast arrays
- **JsonNormalizer** will cast json strings
A sixth normalizer can be optionally enabled:
- **FormRequestNormalizer** will normalize a form request by calling the `validated` method
Normalizers can be globally configured in `config/data.php`, and can be configured on a specific data object by overriding the `normalizers` method.
```php
class SongData extends Data
{
public function __construct(
// ...
) {
}
public static function normalizers(): array
{
return [
ModelNormalizer::class,
ArrayableNormalizer::class,
ObjectNormalizer::class,
ArrayNormalizer::class,
JsonNormalizer::class,
];
}
}
```
A normalizer implements the `Normalizer` interface and should return an array representation of the payload, or null if it cannot normalize the payload:
```php
class ArrayableNormalizer implements Normalizer
{
public function normalize(mixed $value): ?array
{
if (! $value instanceof Arrayable) {
return null;
}
return $value->toArray();
}
}
```
Normalizers are executed in the same order as they are defined in the `normalize` method. The first normalizer not returning null will be used to normalize the payload. Magical creation methods always have precedence over normalizers.