Перейти к основному содержимому

Контекст объекта

Каждый объект класса Data имеет свой контекст на протяжении всего жизненного цикла. Этот контекст динамически управляет свойствами и поведением объекта, позволяя на лету изменять, включать или исключать данные из сериализации.

Методы управления контекстом

exclude

Метод exclude позволяет исключить свойство объекта из результата сериализации, используя dot-notation для вложенных полей.

class UserRequesites extends Data {
public function __construct(
public string $country,
public string $phone_number
) {}
}

class User extends Data {
public function __construct(
public string $name,
public string $password_hash,
public UserDetails $requesitess
) {}
}

$requesites = new UserRequesites("UK", "+4402020000000");

$user = new User('John', "f4091876df6a5d39e6690b7395a95399", $requesites);

$user->exclude('password_hash', 'requesites.phone_number');
$data = $user->toArray();

/*
* $data: [
* "name" => "John",
* "requesites" => [
* "country" => "UK"
* ]
* ]
*/

include

Метод include позволяет явно указать, что ленивое или вложенное свойство должно быть включено в сериализованный вывод.

class User extends Data {
public function __construct(
public Lazy|UserProfile $profile;
) {}
}

$user = User::from([
'profile' => new Lazy(fn () => UserProfile::from($profileData))
]);
// Без вызова include поле "profile" не будет выводиться
$user->include('profile');
$data = $user->toArray();
/* $data: [
* 'profile' => UserProfile
* ]
*/