
Research
SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.
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-entity
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
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.
FAQs
Quickly and conveniently interpret JSON data into PHP classes
We found that 021/api-entity demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
An emerging npm supply chain attack that infects repos, steals CI secrets, and targets developer AI toolchains for further compromise.

Company News
Socket is proud to join the OpenJS Foundation as a Silver Member, deepening our commitment to the long-term health and security of the JavaScript ecosystem.

Security News
npm now links to Socket's security analysis on every package page. Here's what you'll find when you click through.