This package allows you to quickly and conveniently interpret JSON data into PHP classes.
If you like this package, you can support me by donating some cryptocurrency:
1G4U12A7VVVaUrmj4KmNt4C5SaDmCXuW49
LXjysogo9AHiNE7AnUm4zjprDzCCWVESai
0xd23B42D0A84aB51a264953f1a9c9A393c5Ffe4A1
TWEcfzu2UAPsbotZJh8DrEpvdZGho79jTg
You can install the package via composer:
composer require 021/api-entity2.1 version introduces an automatically casts parsing from phpdoc.
You can use @property and @property-read annotations to define property types.
useO21\ApiEntity\BaseEntity;
useO21\ApiEntity\Casts\Getter;
useSDK\Entities\UserProfile; // Your custom classuseSDK\Entities\UserPet; // Your custom classusefunctionO21\ApiEntity\Response\json_props;
/** * Class User * @package SDK\Entities * * @property int $id * @property string $firstName * @property string $lastName * @property \Carbon\Carbon $registerAt * @property UserProfile $profile * @property \Illuminate\Support\Collection<UserPet> $pets * @property-read string $fullName */class User extends BaseEntity
{
publicfunctionfullName(): Getter
{
return Getter::make(fn() => $this->firstName.''.$this->lastName);
}
}
/** @var \Psr\Http\Message\ResponseInterface $response */$response = $api->get('/user/1');
// Get decoded JSON array from response// which is a PSR-7 response or JSON string$props = json_props($response);
// Create User object from JSON props$user = newUser($props);
// Or just pass response to BaseEntity constructor$user = newUser($response);
echo$user->fullName; // John Doeecho$user->full_name; // John Doeecho$user->registerAt->format('Y-m-d H:i:s'); // 2022-01-01 00:00:00echo$user->profile->phone; // +1234567890echo$user->pets->first()->name; // ArchyuseO21\ApiEntity\BaseEntity;
useO21\ApiEntity\Casts\Getter;
useSDK\Entities\UserProfile; // Your custom classuseSDK\Entities\UserPet; // Your custom classusefunctionO21\ApiEntity\Response\json_props;
/** * Class User * @package SDK\Entities * * @property int $id * @property string $firstName * @property string $lastName * @property \Carbon\Carbon $registerAt * @property UserProfile $profile * @property \Illuminate\Support\Collection<UserPet> $pets * @property-read string $fullName */class User extends BaseEntity
{
protectedarray$casts = [
'registerAt' => 'datetime',
'profile' => UserProfile::class,
'pets' => 'collection:'.UserPet::class,
];
publicfunctionfullName(): Getter
{
return Getter::make(fn() => $this->firstName.''.$this->lastName);
}
}
/** @var \Psr\Http\Message\ResponseInterface $response */$response = $api->get('/user/1');
// Get decoded JSON array from response// which is a PSR-7 response or JSON string$props = json_props($response);
// Create User object from JSON props$user = newUser($props);
// Or just pass response to BaseEntity constructor$user = newUser($response);
echo$user->fullName; // John Doeecho$user->full_name; // John Doeecho$user->registerAt->format('Y-m-d H:i:s'); // 2022-01-01 00:00:00echo$user->profile->phone; // +1234567890echo$user->pets->first()->name; // ArchyCheck tests/Entities for more examples.