メニュー項目タイプを変更するためのhook_menu_alter()に相当するものは何ですか?


10

Drupal 8でメニュータイプを変更したいのですが、Drupal 7では、hook_menu_alterを使用してこれを実現できます。

function module_menu_alter(&$items) {
  $items['admin/config/people/ip-blocking/default'] = array(
    'title' => 'Block IP Address',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

同様に、Drupal 8でメニュータイプを変更したいと思います。ありがとうございました。


3
それを読んでdrupal.org/node/2118147
アディ

Berdirが述べたように、メニュータイプはもうありません。アーカイブしようとしているものを指定できますか?
Linus

回答:


7

Linusからの回答は素晴らしいですが、特定の質問に対するフィードバックはありません。

同様に、Drupal 8でメニュータイプを変更したい

Drupal 8にはメニュータイプなどはありません。以前はタイプであったものはすべて、まったく別のものになりました。ルート、メニューリンク、ローカルタスク、ローカルアクション。そして、多くの場合、あなたは複数のものを持っています。常にルートがあります(このタイプのコールバックを呼び出すために使用される7.x)。さらに、そのルートのメニューリンク、ローカルタスク、またはアクションを追加します。

したがって、たとえばメニューリンクをローカルタスクに変換したり、ルートをローカルタスクに変換したりすることはできません。あなたができる唯一のことは、例えばメニューリンクを変更して(これは上記のルート変更とは何の関係もない)、代わりに新しいローカルタスクを作成することです。

Linusの回答を参照して、リンクとそれらの各操作を行う方法の詳細を確認してください。


あなたの言う通り、私はそれを完全に忘れていました。追加ありがとうございます。
Linus

19

Drupal 8には新しいメニューシステムがhook_menuあり、hook_menu_alterもうありません。

既存のルートを変更したい場合、Drupal 7に比べて少し複雑です。

あなたのモジュールで、あなたはYOURMODULE/src/Routing/CLASSNAME.phpその拡張でクラスファイルを作成する必要がありますRouteSubscriberBase

/**
 * @file
 * Contains \Drupal\YOURMODULE\Routing\RouteSubscriber.
 */

namespace Drupal\YOURMODULE\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\RouteCollection;

/**
 * Listens to the dynamic route events.
 */
class RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritdoc}
   */
  protected function alterRoutes(RouteCollection $collection) {
    // Get the route you want to alter
    $route = $collection->get('system.admin_content');

    // alter the route...
  }
}

ノードモジュールのRouteSubsciberクラスを例に取ることができます。

RouteSubscriberを認識させるにYOURMODULE.services.ymlは、モジュールディレクトリのルートにファイルを作成する必要もあります。

services:
  node.route_subscriber:
    class: Drupal\YOURMODULE\Routing\RouteSubscriber
    tags:
      - { name: event_subscriber }

新しいメニューシステムをよりよく理解するには、次の記事をお勧めします。

編集: としてBerdirで述べた、メニューシステムは、D7のメニューシステムとは何の関係も持たない、今異なる構造を有しているので、もはや、メニューの種類のようなものはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.