forked from apoloz/alfa-bank-sdk
67 lines
1.9 KiB
Markdown
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.
|