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ของโมดูลโหนดเป็นตัวอย่าง
ในการให้รูทสมาชิกของคุณเป็นที่รู้จักคุณต้องสร้างYOURMODULE.services.yml
ไฟล์ในรูทของไดเรกทอรีโมดูลของคุณ:
services:
node.route_subscriber:
class: Drupal\YOURMODULE\Routing\RouteSubscriber
tags:
- { name: event_subscriber }
เพื่อให้เข้าใจถึงระบบเมนูใหม่ได้ดีขึ้นฉันอยากจะแนะนำบทความต่อไปนี้:
แก้ไข:
ในฐานะที่เป็นที่กล่าวถึงโดย Berdirระบบเมนูมีโครงสร้างที่แตกต่างกันในขณะนี้ซึ่งมีอะไรจะทำอย่างไรกับระบบเมนู D7 จึงไม่มีสิ่งเช่นประเภทเมนูอีกต่อไป