You are here

public function MenuLinkManager::addDefinition in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Menu/MenuLinkManager.php \Drupal\Core\Menu\MenuLinkManager::addDefinition()
  2. 9 core/lib/Drupal/Core/Menu/MenuLinkManager.php \Drupal\Core\Menu\MenuLinkManager::addDefinition()

Adds a new menu link definition to the menu tree storage.

Use this function when you know there is no entry in the tree. This is used for plugins not found through discovery to add new definitions.

Parameters

string $id: The plugin ID for the new menu link definition that is being added.

array $definition: The values of the link definition.

Return value

\Drupal\Core\Menu\MenuLinkInterface A plugin instance created using the newly added definition.

Throws

\Drupal\Component\Plugin\Exception\PluginException Thrown when the $id is not valid or is an already existing plugin ID.

Overrides MenuLinkManagerInterface::addDefinition

File

core/lib/Drupal/Core/Menu/MenuLinkManager.php, line 346

Class

MenuLinkManager
Manages discovery, instantiation, and tree building of menu link plugins.

Namespace

Drupal\Core\Menu

Code

public function addDefinition($id, array $definition) {
  if ($this->treeStorage
    ->load($id)) {
    throw new PluginException("The menu link ID {$id} already exists as a plugin definition");
  }
  elseif ($id === '') {
    throw new PluginException("The menu link ID cannot be empty");
  }

  // Add defaults, so there is no requirement to specify everything.
  $this
    ->processDefinition($definition, $id);

  // Store the new link in the tree.
  $this->treeStorage
    ->save($definition);
  return $this
    ->createInstance($id);
}