1. Go to this page and download the library: Download meritum/serialization library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
meritum / serialization example snippets
use Meritum\Serialization\SerializerInterface;
final class UserSerializer implements SerializerInterface
{
public function serialize(mixed $data): array
{
return [
'id' => $data->id,
'name' => $data->name,
'email' => $data->email,
];
}
}
final class PostSerializer implements SerializerInterface
{
public function serialize(mixed $data): array
{
return [
'id' => $data->id,
'title' => $data->title,
'author' => new UserSerializer()->serialize($data->author),
];
}
}
use Meritum\Serialization\Formatter;
use Meritum\Serialization\Resource\Item;
use Meritum\Serialization\Strategy\DataArrayStrategy;
$formatter = new Formatter(new DataArrayStrategy());
$envelope = $formatter->format(new Item($user, new UserSerializer()));
// $envelope implements JsonSerializable — pass it directly to any JSON response
return new JsonResponse($envelope);
use Meritum\Serialization\Resource\Item;
$item = new Item($user, new UserSerializer());
$envelope = $formatter->format($item);
use Meritum\Serialization\Resource\Collection;
$collection = new Collection($users, new UserSerializer());
$envelope = $formatter->format($collection);
$item = (new Item($user, new UserSerializer()))
->addMeta('version', 2)
->addMeta('requestId', 'abc123');
$envelope = $formatter->format($item);
use Meritum\Serialization\Pagination\CursorInterface;
final class MyCursor implements CursorInterface
{
public function getPrevious(): ?string { ... }
public function getNext(): ?string { ... }
public function getPerPage(): int { ... }
}
$collection = (new Collection($users, new UserSerializer()))
->setCursor($cursor);
$envelope = $formatter->format($collection);
use Meritum\Serialization\Pagination\PaginatorInterface;
final class MyPaginator implements PaginatorInterface
{
public function getCurrentPage(): int { ... }
public function getLastPage(): int { ... }
public function getTotal(): int { ... }
public function getCount(): int { ... }
public function getPerPage(): int { ... }
}
$collection = (new Collection($users, new UserSerializer()))
->setPaginator($paginator);
$envelope = $formatter->format($collection);
use Meritum\Serialization\Formatter;
use Meritum\Serialization\Strategy\ArrayStrategy;
$formatter = new Formatter(new ArrayStrategy());
$envelope = $formatter->format(new Item($user, new UserSerializer()));
// {"id": 1, "name": "Mike", "email": "[email protected]"}
use Meritum\Serialization\EnvelopeInterface;
use Meritum\Serialization\Envelope;
use Meritum\Serialization\Resource\ItemInterface;
use Meritum\Serialization\Resource\CollectionInterface;
use Meritum\Serialization\Strategy\StrategyInterface;
final class MyStrategy implements StrategyInterface
{
public function item(ItemInterface $item): EnvelopeInterface
{
$data = ['result' => $item->getSerializer()->serialize($item->getData())];
if ([] !== $item->getMeta()) {
$data['meta'] = $item->getMeta();
}
return new Envelope($data);
}
public function collection(CollectionInterface $collection): EnvelopeInterface
{
$data = $collection->getPagination();
$data['results'] = [];
foreach ($collection->getData() as $model) {
$data['results'][] = $collection->getSerializer()->serialize($model);
}
if ([] !== $collection->getMeta()) {
$data['meta'] = $collection->getMeta();
}
return new Envelope($data);
}
}
use Meritum\Serialization\SerializationModule;
use Meritum\Serialization\Strategy\StrategyInterface;
$kernel->define(StrategyInterface::class, fn () => new MyStrategy())->share();
$kernel->addModule(new SerializationModule());
$kernel->boot();
$formatter = $kernel->getContainer()->get(FormatterInterface::class);
use Meritum\Serialization\Formatter;
use Meritum\Serialization\Strategy\ArrayStrategy;
use Meritum\Serialization\Strategy\DataArrayStrategy;
$kernel->define('formatter.default', fn () => new Formatter(new DataArrayStrategy()))->share();
$kernel->define('formatter.bare', fn () => new Formatter(new ArrayStrategy()))->share();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.