Serializable Entity
Convert entity into array or json.
Apply JsonSerializable into entity by extending a class.
Install
Via composer:
composer require niko9911/niko9911/serializable-entity
Usage
You can use this to convert objects statically.
`EntityToArray::convert(object $entity ,[, int $recursionDepth = 2
[, bool $throwExceptionOnRecursionLimit = true ]
[, bool $replaceValuesOnRecursionLimit = true ]]]): array`
Or if you want benefit from implementing \JsonSerializable interface
you can extend class \Niko9911\Serializable\Serializable. In that case
you will have 3 new methods in your class, toArray, toJson and jsonSerialize
.
Example: Using Static Way
<?php
declare(strict_types=1);
// These is just our example entities.
final class Flag
{
/ @var string */
private $mainColor;
/ @var int */
private $height;
/ @var int */
private $width;
/ @var bool */
private $registered;
public function __construct(
string $mainColor,
int $height,
int $width,
bool $registered
)
{
$this->mainColor = $mainColor;
$this->height = $height;
$this->width = $width;
$this->registered = $registered;
}
public function getMainColor(): string
{
return $this->mainColor;
}
public function getHeight(): int
{
return $this->height;
}
public function getWidth(): int
{
return $this->width;
}
public function getRegistered(): bool
{
return $this->registered;
}
}
// It is not mandatory to extend. Only if you want benefit from
// implementing \JsonSerializable and having toArray, toJson methods.
final class Country extends \Niko9911\Serializable\Serializable
{
// If you don't want implement \JsonSerializable,
// but you want methods `toArray & toJson` into
// you entity, you can add this trait.
use \Niko9911\Serializable\SerializableTrait;
/ @var string */
private $name;
/ @var int */
private $id;
/ @var Flag */
private $flag;
public function __construct(string $name, int $id, Flag $flag)
{
$this->name = $name;
$this->id = $id;
$this->flag = $flag;
}
public function getName(): string
{
return $this->name;
}
public function getId(): int
{
return $this->id;
}
public function getFlag(): Flag
{
return $this->flag;
}
}
$entity = new Country('Finland', 358, new Flag('Blue', 150, 245, true));
$result1 = \Niko9911\Serializable\EntityToArray::convert($entity);
$result2 = $entity->toArray();
$result3 = $entity->toJson();
$result4 = \json_encode($entity);
var_dump($result1); // ['name'=>self::NAME,'id'=>self::CODE,'flag'=>['mainColor'=>self::MAIN,'height'=>self::SIZE[0],'width'=>self::SIZE[1],'registered'=>self::REGI,'options'=>[]]]
var_dump($result1 === $result2); // True
var_dump($result3); // {"name":"Finland","id":358,"flag":{"options":[],"mainColor":"Blue","height":150,"width":245,"registered":true}}
var_dump($result3 === $result4); // True
License
Licensed under the MIT license.