Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x

MenuLinkManagerInterface.php

Namespace

Drupal\Core\Menu

File

core/lib/Drupal/Core/Menu/MenuLinkManagerInterface.php

View source
<?php

namespace Drupal\Core\Menu;

use Drupal\Component\Plugin\PluginManagerInterface;

/**
 * Defines an interface for managing menu links and storing their definitions.
 *
 * Menu link managers support both automatic plugin definition discovery and
 * manually maintaining plugin definitions.
 *
 * MenuLinkManagerInterface::updateDefinition() can be used to update a single
 * menu link's definition and pass this onto the menu storage without requiring
 * a full MenuLinkManagerInterface::rebuild().
 *
 * Implementations that do not use automatic discovery should call
 * MenuLinkManagerInterface::addDefinition() or
 * MenuLinkManagerInterface::removeDefinition() when they add or remove links,
 * and MenuLinkManagerInterface::updateDefinition() to update links they have
 * already defined.
 */
interface MenuLinkManagerInterface extends PluginManagerInterface {
    
    /**
     * Triggers discovery, save, and cleanup of discovered links.
     */
    public function rebuild();
    
    /**
     * Deletes all links having a certain menu name.
     *
     * If a link is not deletable but is resettable, the link will be reset to have
     * its original menu name, under the assumption that the original menu is not
     * the one we are deleting it from. Note that when resetting, if the original
     * menu name is the same as the menu name passed to this method, the link will
     * not be moved or deleted.
     *
     * @param string $menu_name
     *   The name of the menu whose links will be deleted or reset.
     */
    public function deleteLinksInMenu($menu_name);
    
    /**
     * Removes a single link definition from the menu tree storage.
     *
     * This is used for plugins not found through discovery to remove definitions.
     *
     * @param string $id
     *   The menu link plugin ID.
     * @param bool $persist
     *   If TRUE, this method will attempt to persist the deletion from any
     *   external storage by invoking MenuLinkInterface::deleteLink() on the
     *   plugin that is being deleted.
     *
     * @throws \Drupal\Component\Plugin\Exception\PluginException
     *   Thrown if the $id is not a valid, existing, plugin ID or if the link
     *   cannot be deleted.
     */
    public function removeDefinition($id, $persist = TRUE);
    
    /**
     * Loads multiple plugin instances based on route.
     *
     * @param string $route_name
     *   The route name.
     * @param array $route_parameters
     *   (optional) The route parameters. Defaults to an empty array.
     * @param string $menu_name
     *   (optional) Restricts the found links to just those in the named menu.
     *
     * @return \Drupal\Core\Menu\MenuLinkInterface[]
     *   An array of instances keyed by plugin ID.
     */
    public function loadLinksByRoute($route_name, array $route_parameters = [], $menu_name = NULL);
    
    /**
     * 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.
     *
     * @param string $id
     *   The plugin ID for the new menu link definition that is being added.
     * @param array $definition
     *   The values of the link definition.
     *
     * @return \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.
     */
    public function addDefinition($id, array $definition);
    
    /**
     * Updates the values for a menu link definition in the menu tree storage.
     *
     * This will update the definition for a discovered menu link without the
     * need for a full rebuild. It is also used for plugins not found through
     * discovery to update definitions.
     *
     * @param string $id
     *   The menu link plugin ID.
     * @param array $new_definition_values
     *   The new values for the link definition. This will usually be just a
     *   subset of the plugin definition.
     * @param bool $persist
     *   TRUE to also have the link instance itself persist the changed values to
     *   any additional storage by invoking MenuLinkInterface::updateDefinition()
     *   on the plugin that is being updated.
     *
     * @return \Drupal\Core\Menu\MenuLinkInterface
     *   A plugin instance created using the updated definition.
     *
     * @throws \Drupal\Component\Plugin\Exception\PluginException
     *   Thrown if the $id is not a valid, existing, plugin ID.
     */
    public function updateDefinition($id, array $new_definition_values, $persist = TRUE);
    
    /**
     * Resets the values for a menu link based on the values found by discovery.
     *
     * @param string $id
     *   The menu link plugin ID.
     *
     * @return \Drupal\Core\Menu\MenuLinkInterface
     *   The menu link instance after being reset.
     *
     * @throws \Drupal\Component\Plugin\Exception\PluginException
     *   Thrown if the $id is not a valid, existing, plugin ID or if the link
     *   cannot be reset.
     */
    public function resetLink($id);
    
    /**
     * Counts the total number of menu links.
     *
     * @param string $menu_name
     *   (optional) The menu name to count by. Defaults to all menus.
     *
     * @return int
     *   The number of menu links in the named menu, or in all menus if the
     *   menu name is NULL.
     */
    public function countMenuLinks($menu_name = NULL);
    
    /**
     * Loads all parent link IDs of a given menu link.
     *
     * This method is very similar to getActiveTrailIds() but allows the link to
     * be specified rather than being discovered based on the menu name and
     * request. This method is mostly useful for testing.
     *
     * @param string $id
     *   The menu link plugin ID.
     *
     * @return array
     *   An ordered array of IDs representing the path to the root of the tree.
     *   The first element of the array will be equal to $id, unless $id is not
     *   valid, in which case the return value will be NULL.
     */
    public function getParentIds($id);
    
    /**
     * Loads all child link IDs of a given menu link, regardless of visibility.
     *
     * This method is mostly useful for testing.
     *
     * @param string $id
     *   The menu link plugin ID.
     *
     * @return array
     *   An unordered array of IDs representing the IDs of all children, or NULL
     *   if the ID is invalid.
     */
    public function getChildIds($id);
    
    /**
     * Determines if any links use a given menu name.
     *
     * @param string $menu_name
     *   The menu name.
     *
     * @return bool
     *   TRUE if any links are present in the named menu, FALSE otherwise.
     */
    public function menuNameInUse($menu_name);
    
    /**
     * Resets any local definition cache. Used for testing.
     */
    public function resetDefinitions();

}

Interfaces

Title Deprecated Summary
MenuLinkManagerInterface Defines an interface for managing menu links and storing their definitions.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal