Change record status: 
Project: 
Introduced in branch: 
8.0.x
Introduced in version: 
8.0.0-beta1
Description: 

theme_menu_link() has been removed. Menu links must now be processed as a collection using hook_preprocess_HOOK() for menu.html.twig and derivative templates.

Use hook_preprocess_menu() to target all menus, or hook_preprocess_menu__MENU_NAME() to target a specific menu. Refer to MenuLinkTree::build() and MenuLinkTree::buildItems() for details.

Before:

function MYTHEME_menu_link(&$variables) {
  // Force menu link text to be lower-case.
  $element = &$variables['element'];
  $element['#title'] = drupal_strtolower($element['#title']);
  return theme_menu_link($variables);
}

Now:

function MYTHEME_preprocess_menu(&$variables) {
  // Force menu link text to be lower-case.
  // @see MenuLinkTree::build() and MenuLinkTree::buildItems() for details
  // of how $variables['items'] is structured.
  $process_items = function(&$items) use (&$process_items) {
    foreach ($items as &$item) {
      $item['title'] = mb_strtolower($item['title']);
      if (!empty($item['below'])) {
        $process_items($item['below']);
      }
    }
  };
  $process_items($variables['items']);
}

Notes:

Although menu_link_content is now an Entity Type in Drupal 8, none of the hooks for altering how an entity is rendered (refer to core/lib/Drupal/Core/Entity/entity.api.php) are invoked when menus are rendered, so these cannot be used as a substitute for theme_menu_link().

The menu links themselves are generated via the generic Twig link() function (see Drupal\Core\Template\TwigExtension::getLink()) and are indistinguishable from non-menu links generated that same way, and so hook_link_alter() is also not appropriate.

Impacts: 
Module developers
Themers