Devise\Menus\MenusManager::syncMenuItems PHP Method

syncMenuItems() protected method

Sync the menu items with this menu, this creates new items, reorders the positions and updates parent item ids too.
protected syncMenuItems ( Menu $menu, $input ) : void
$menu Menu
$input
return void
    protected function syncMenuItems($menu, $input)
    {
        $position = 0;
        if (!isset($input['item'])) {
            $input['item'] = array();
        }
        if (!isset($input['item_order'])) {
            $input['item_order'] = array();
        }
        list($items, $order) = $this->createNewMenuItems($menu, $input['item'], $input['item_order']);
        // sync up all the menu item data
        foreach ($items as $id => $item) {
            $menuItem = $this->MenuItem->findOrFail($id);
            if (isset($item['image'])) {
                $menuItem->image = $item['image'];
            }
            if (isset($item['url_or_page']) && $item['url_or_page'] !== 'page') {
                $item['page_id'] = NULL;
            }
            $menuItem->parent_item_id = $order[$id] ?: null;
            $menuItem->url = $item['url'];
            $menuItem->page_id = $item['page_id'];
            $menuItem->name = $item['name'];
            $menuItem->position = $position++;
            $menuItem->permission = array_get($item, 'permission', null);
            $menuItem->save();
        }
        // user removed these menu items so let's remove in database
        $removeItems = array_diff($menu->allItems()->lists('id')->all(), array_keys($items));
        foreach ($removeItems as $removeItem) {
            $item = $this->MenuItem->find($removeItem);
            if ($item) {
                $item->delete();
            }
        }
    }