Drupal 8 có một hệ thống menu mới, không còn hook_menu
và không hook_menu_alter
còn nữa.
Nếu bạn muốn thay đổi một tuyến đường hiện tại, nó phức tạp hơn một chút so với Drupal 7.
Trong mô-đun của bạn, bạn phải tạo một tệp lớp tại YOURMODULE/src/Routing/CLASSNAME.php
đó mở rộng 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...
}
}
Bạn có thể lấy lớp RouteSubsciber của mô-đun nút làm ví dụ.
Để cho nhận dạng RouteSubscacker của bạn, bạn cũng phải tạo một YOURMODULE.services.yml
tệp trong thư mục gốc của mô-đun:
services:
node.route_subscriber:
class: Drupal\YOURMODULE\Routing\RouteSubscriber
tags:
- { name: event_subscriber }
Để hiểu rõ hơn về hệ thống menu mới, tôi muốn giới thiệu các bài viết sau:
Chỉnh sửa:
Như Berdir đã đề cập , hệ thống menu hiện có cấu trúc khác, không liên quan gì đến hệ thống menu của D7, do đó không còn loại menu nào nữa.