021 / api-entity
Quickly and conveniently interpret JSON data into PHP classes
v2.1.3
2025-08-30 03:10 UTC
Requires
- php: >=8.1 <8.4
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0|^12.0
- psr/http-message: ^2.0
Requires (Dev)
- phpunit/phpunit: ^10.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
This package allows you to quickly and conveniently interpret JSON data into PHP classes.
Support
If you like this package, you can support me by donating some cryptocurrency:
Bitcoin
1G4U12A7VVVaUrmj4KmNt4C5SaDmCXuW49
Litecoin
LXjysogo9AHiNE7AnUm4zjprDzCCWVESai
Ethereum
0xd23B42D0A84aB51a264953f1a9c9A393c5Ffe4A1
Tron
TWEcfzu2UAPsbotZJh8DrEpvdZGho79jTg
Installation
You can install the package via composer:
composer require 021/api-entity
Usage
After 2.1
2.1 version introduces an automatically casts parsing from phpdoc.
You can use @property and @property-read annotations to define property types.
use O21\ApiEntity\BaseEntity; use O21\ApiEntity\Casts\Getter; use SDK\Entities\UserProfile; // Your custom class use SDK\Entities\UserPet; // Your custom class use function O21\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 { public function fullName(): 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 = new User($props); // Or just pass response to BaseEntity constructor $user = new User($response); echo $user->fullName; // John Doe echo $user->full_name; // John Doe echo $user->registerAt->format('Y-m-d H:i:s'); // 2022-01-01 00:00:00 echo $user->profile->phone; // +1234567890 echo $user->pets->first()->name; // Archy
Before 2.1
use O21\ApiEntity\BaseEntity; use O21\ApiEntity\Casts\Getter; use SDK\Entities\UserProfile; // Your custom class use SDK\Entities\UserPet; // Your custom class use function O21\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 { protected array $casts = [ 'registerAt' => 'datetime', 'profile' => UserProfile::class, 'pets' => 'collection:'.UserPet::class, ]; public function fullName(): 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 = new User($props); // Or just pass response to BaseEntity constructor $user = new User($response); echo $user->fullName; // John Doe echo $user->full_name; // John Doe echo $user->registerAt->format('Y-m-d H:i:s'); // 2022-01-01 00:00:00 echo $user->profile->phone; // +1234567890 echo $user->pets->first()->name; // Archy
Check tests/Entities for more examples.