Соединить ссылки при рекурсии

Есть такой код

private function tree(array &$items, ItemInterface $menu, string $url = null): ItemInterface
    {
        if (!$items) {
            return $menu;
        }

        foreach ($items as $item) {
            $menuOptions['label'] = $item['title'];

            if ($item['lvl'] !== 1) {
                $menuOptions['uri'] = $item['alias'];
            }

            $menuItem = $this->factory->createItem("{$item['title']}_{$item['id']}", $menuOptions);
            $menuItem->setAttribute('class', 'nav-item');
            $menuItem->setLinkAttribute('class', 'nav-link');
            $menuItem->setLabelAttribute('class', 'large-menu-title');
            $menuItem->setChildrenAttribute('class', 'dropdown-menu dropdown-large-menu');

            if (!empty($item['banner'])) {
                $menuItem->setAttributes(['image' => $item['banner']]);
            }

            if (!empty($item['__children'])) {
                $menuItem->setAttribute('class', 'nav-item dropdown');
                $this->tree($item['__children'], $menuItem, $url);
            }

            $menu->addChild($menuItem);
        }
        return $menu;
    }

Мне нужно чтобы при рекурсии ссылки не обновлялись, а наоборот соединялись с предыдущей ссылкой например site.ru/catalog/man/shoes/snikkers/..../.../...

я никак не могу добится такого результата.


Ответы (1 шт):

Автор решения: borzz.one

Решил проблему вот таким образом.

private function tree(array &$items, ItemInterface $menu, string $url = null): ItemInterface
    {
        if (!$items) {
            return $menu;
        }

        foreach ($items as $item) {
            $link = "{$url}/{$item['alias']}";

            $menuOptions['label'] = $item['title'];
            $menuOptions['uri']   = $link;

            $menuItem = $this->factory->createItem("{$item['title']}_{$item['id']}", $menuOptions);
            $menuItem->setAttribute('class', 'nav-item');
            $menuItem->setLinkAttribute('class', 'nav-link');
            $menuItem->setLabelAttribute('class', 'large-menu-title');
            $menuItem->setChildrenAttribute('class', 'dropdown-menu dropdown-large-menu');

            if (!empty($item['banner'])) {
                $menuItem->setAttributes(['image' => $item['banner']]);
            }

            if (!empty($item['__children'])) {
                $menuItem->setAttribute('class', 'nav-item dropdown');
                $this->tree($item['__children'], $menuItem, $link);
            }

            $menu->addChild($menuItem);
        }
        return $menu;
    }
→ Ссылка