laminas-api-tools/api-tools-hal

entityLinks from Collection are not set in the embeded entity.

weierophinney opened this issue · 1 comments

If I set entity links within collection using $collection->setEntityLinks($LinkColection) these are not rendered.
Within Hal plugin exctractCollection() method if the $entity has metadataMap then its created from metadataMap inclusive links.

if (is_object($entity) && $metadataMap->has($entity)) { $entity = $this->getResourceFactory()->createEntityFromMetadata($entity, $metadataMap->get($entity)); }

After that there is only the call for rendering the $entity.
if ($entity instanceof Entity) { // Depth does not increment at this level $collection[] = $this->renderEntity($entity, $this->getRenderCollections(), $depth, $maxDepth); continue; }

Probably there shall be a call to $entity->setLink($halCollection->getEntityLinks()) before the rendering.


Originally posted by @vlx73 at zfcampus/zf-hal#175

I would propose following change . in the protected method of class Hal

`protected function extractCollection(Collection $halCollection, $depth = 0, $maxDepth = null)
{
...
if ($entity instanceof Entity) {

            // inject entity links from the parrent Collection
            if (!is_null($halCollection->getEntityLinks())) {
                $entityLinks = $entity->getLinks();
                foreach ($halCollection->getEntityLinks() as $collectionsEntityLink)
                    $entityLinks->idempotentAdd($collectionsEntityLink);
            }

            // Depth does not increment at this level
            $collection[] = $this->renderEntity($entity, $this->getRenderCollections(), $depth, $maxDepth);
            continue;
        }`

Originally posted by @vlx73 at zfcampus/zf-hal#175 (comment)