Мне трудно сериализовать то, что я называю деревом объектов. Я использую expressive-hal (v3) со следующей конфигурацией HAL:
[
'__class__' => RouteBasedResourceMetadata::class,
'resource_class' => Handler\PersonEntity::class,
'route' => 'list.persons',
'extractor' => ClassMethodsHydrator::class,
],
[
'__class__' => RouteBasedCollectionMetadata::class,
'collection_class' => Handler\PersonCollection::class,
'collection_relation' => 'persons',
'route' => 'list.persons',
],
Это мой класс коллекции:
class PersonCollection extends Paginator
{
}
Это мой класс сущности:
class PersonEntity
{
private $id;
private $name;
public function getId() : int
{
return $this->id;
}
public function setId(int $id) : self
{
$this->id = $id;
return $this;
}
public function getName() : NameEntity
{
if (null === $this->name) {
$this->name = new NameEntity();
$this->name->setFirstName('fn');
$this->name->setLastName('ln');
}
return $this->name;
}
public function setName(NameEntity $name) : self
{
$this->name = $name;
return $this;
}
}
class NameEntity
{
private $firstName;
private $lastName;
public function getFirstName() : string
{
return $this->firstName;
}
public function setFirstName(string $firstName) : self
{
$this->firstName = $firstName;
return $this;
}
public function getLastName() : string
{
return $this->lastName;
}
public function setLastName(string $lastName) : self
{
$this->lastName = $lastName;
return $this;
}
}
Это моя команда построения HAL:
$halResource = $this->getResourceGenerator()->fromObject($personCollection, $request);
И по крайней мере это мой вывод:
{
"_total_items": 1,
"_page": 1,
"_page_count": 1,
"_links": {
"self": {
"href": "/api/persons?page=1"
}
},
"_embedded": {
"persons": [
{
"id": 1,
"name": {},
"_links": {
"self": {
"href": "/api/persons/1"
}
}
}
]
}
}
Что я хочу знать: почему атрибут name пуст ? Почему NameEntity не выводится правильно?