-
-
Notifications
You must be signed in to change notification settings - Fork 20
Description
As stated by Matus Zeman @matuszeman here https://groups.google.com/a/zend.com/forum/#!topic/apigility-users/zck43pReklw there seems to be a bug in the Hal helper when rendering single entities.
Quoted from the google group:
"I believe there is a bug in Hal helper (https://github.com/zfcampus/zf-hal/blob/master/src/Plugin/Hal.php#L1140) where convertEntityToArray() method caches converted entities so when you set new entities or links into entity using 'renderEntity' event convertEntityToArray() returns original entity anyway ignoring everything - https://github.com/zfcampus/zf-hal/blob/master/src/Plugin/Hal.php#L495"
Code for single Entity (http://192.168.33.101/events/2182)
public function onRenderEntity($e)
{
$halEntity = $e->getParam('entity');
$version = $this->isEntityOfInterest($halEntity->entity, 'Events', 1);
if (false !== $version) {
if($halEntity->entity instanceof EventsEntity) {
$repository = $this->sm->get('Umid\V1\Rest\Unternehmen\UnternehmenResource');
$item = $repository->fetch($halEntity->entity['events_location_Id']);
$halEntity->entity['unternehmen'] = $item;
}
$this->injectEventsEntityLinks($halEntity, $version);
return;
}
}Dump of $halEntity
object(ZF\Hal\Entity)[637]
protected 'id' => string '2182' (length=4)
protected 'links' =>
object(ZF\Hal\Link\LinkCollection)[635]
protected 'links' =>
array (size=1)
'self' =>
object(ZF\Hal\Link\Link)[636]
protected 'props' =>
array (size=0)
empty
protected 'relation' => string 'self' (length=4)
protected 'route' => string 'umid.rest.events' (length=16)
protected 'routeOptions' =>
array (size=0)
empty
protected 'routeParams' =>
array (size=1)
'events_id' => string '2182' (length=4)
protected 'url' => null
protected 'entity' =>
object(Umid\V1\Rest\Events\EventsEntity)[502]
public 'Id' => string '2182' (length=4)
...
public 'unternehmen' =>
object(Umid\V1\Rest\Unternehmen\UnternehmenEntity)[696]
public 'Id' => string '12608' (length=5)
public 'land_Id' => string '1' (length=1)
public 'bundesland_Id' => string '0' (length=1)
...
Output - embedded entity is missing
{
Id: "2182"
events_location_Id: "12608"
location_Id: null
unternehmen_Id: "12608"
sehenswuerdigkeit_Id: "0"
veranstalter_Id: "12608"
...
-_links: {
-self: {
href: "http:\/\/192.168.33.101\/events\/2182"
}
}
}Code for Collection (http://192.168.33.101/events)
public function onRenderCollectionEntity($e)
{
$entity = $e->getParam('entity');
$version = $this->isEntityOfInterest($entity, 'Events', 1);
if (false !== $version) {
$halEntity = new HalEntity($entity, $entity['Id']);
if($halEntity instanceof EventsEntity) {
$repository = $this->sm->get('Umid\V1\Rest\Unternehmen\UnternehmenResource');
$item = $repository->fetch($halEntity['events_location_Id']);
$halEntity['unternehmen'] = $item;
}
$this->injectEventsEntityLinks($halEntity, $version);
$e->setParam('entity', $halEntity);
return;
}
}Dump of $halEntity
object(ZF\Hal\Entity)[685]
protected 'id' => string '2182' (length=4)
protected 'links' =>
object(ZF\Hal\Link\LinkCollection)[687]
protected 'links' =>
array (size=1)
'self' =>
object(ZF\Hal\Link\Link)[690]
protected 'props' =>
array (size=0)
empty
protected 'relation' => string 'self' (length=4)
protected 'route' => string 'umid.rest.events' (length=16)
protected 'routeOptions' =>
array (size=0)
empty
protected 'routeParams' =>
array (size=1)
'events_id' => string '2182' (length=4)
protected 'url' => null
protected 'entity' =>
object(Umid\V1\Rest\Events\EventsEntity)[667]
public 'Id' => string '2182' (length=4)
...
public 'unternehmen' =>
object(Umid\V1\Rest\Unternehmen\UnternehmenEntity)[716]
public 'Id' => string '12608' (length=5)
public 'land_Id' => string '1' (length=1)
public 'bundesland_Id' => string '0' (length=1)
...
Output - with embedded entity
{
Id: "2182"
events_location_Id: "12608"
location_Id: null
unternehmen_Id: "12608"
sehenswuerdigkeit_Id: "0"
veranstalter_Id: "12608"
...
-_embedded: {
-unternehmen: {
Id: "12608"
land_Id: "1"
bundesland_Id: "0"
landkreis_Id: "0"
region_Id: "0"
...
-_links: {
-self: {
href: "http:\/\/192.168.33.101\/unternehmen\/12608"
}
}
}
}
-_links: {
-self: {
href: "http:\/\/192.168.33.101\/events\/2182"
}
}
}Originally posted by @Alanin at zfcampus/zf-hal#53