Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Serializable Entity

Convert entity into array or json. Apply JsonSerializable into entity by extending a class.

See my blog post about this here!


Via composer:

composer require niko9911/serializable-entity


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


// 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


Licensed under the MIT license.

You can’t perform that action at this time.