public static function applyDefaults(array $items, array $defaults = null): array
    {
        $defaults = empty($defaults) ? Configure::readOrFail('Menu.defaults') : $defaults;

        // merge item properties with defaults
        $func = function (&$item, $k) use (&$func, $defaults) {
            if (!empty($item['children'])) {
                array_walk($item['children'], $func);
            }

            $item = array_merge($defaults, $item);
        };
        array_walk($items, $func);

        return $items;
    }