function StaticMenuLinkOverrides::saveOverride

Same name in other branches
  1. 9 core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php \Drupal\Core\Menu\StaticMenuLinkOverrides::saveOverride()
  2. 8.9.x core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php \Drupal\Core\Menu\StaticMenuLinkOverrides::saveOverride()
  3. 11.x core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php \Drupal\Core\Menu\StaticMenuLinkOverrides::saveOverride()

File

core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php, line 126

Class

StaticMenuLinkOverrides
Defines an implementation of the menu link override using a config file.

Namespace

Drupal\Core\Menu

Code

public function saveOverride($id, array $definition) {
    // Only allow to override a specific subset of the keys.
    $expected = [
        'menu_name' => '',
        'parent' => '',
        'weight' => 0,
        'expanded' => FALSE,
        'enabled' => FALSE,
    ];
    // Filter the overrides to only those that are expected.
    $definition = array_intersect_key($definition, $expected);
    // Ensure all values are set.
    $definition = $definition + $expected;
    if ($definition) {
        // Cast keys to avoid config schema during save.
        $definition['menu_name'] = (string) $definition['menu_name'];
        $definition['parent'] = (string) $definition['parent'];
        $definition['weight'] = (int) $definition['weight'];
        $definition['expanded'] = (bool) $definition['expanded'];
        $definition['enabled'] = (bool) $definition['enabled'];
        $id = static::encodeId($id);
        $all_overrides = $this->getConfig()
            ->get('definitions');
        // Combine with any existing data.
        $all_overrides[$id] = $definition + $this->loadOverride($id);
        $this->getConfig()
            ->set('definitions', $all_overrides)
            ->save(TRUE);
    }
    return array_keys($definition);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.