ฉันกำลังพยายามจำกัดการเข้าถึงสำหรับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบในผู้ดูแลระบบ/โครงสร้าง/เมนู เพื่อให้ผู้ดูแลระบบเท่านั้นที่สามารถสร้างลิงก์ใหม่ผ่านทางผู้ดูแลระบบ/โครงสร้าง/เมนู
ตอนนี้ฉันต้องการให้เมนูพิเศษที่มีรหัส "โฟกัส" ปุ่ม "เพิ่มลิงก์" พร้อมใช้งานสำหรับบทบาทอื่นด้วย
นี่คือภาพหน้าจอของแบ็กเอนด์จริงโดยที่ "เพิ่มลิงก์" ยังใช้งานได้ ฉันต้องการให้สิ่งนี้หายไปสำหรับ Hauptnavigation แต่ไม่ใช่สำหรับ Fokusnavigation

สิ่งเดียวกันเมื่อคุณคลิกที่เมนู คุณได้รับปุ่ม "เพิ่มลิงค์" ฉันสามารถปิดใช้งานสิ่งนี้ด้วยรหัสด้านล่าง แต่ฉันไม่ทราบวิธีอนุญาตสำหรับบทบาทที่ไม่ใช่ผู้ดูแลระบบอีกครั้ง

ฉันสามารถรับ menu->id() ในไฟล์ my_menu.module ด้วยรหัสเดียวกันกับใน routesubscriber ด้านล่าง แต่อย่างใดมันไม่ทำงานใน routesubscriber
Drush CR ส่งคืนค่า an
ข้อผิดพลาดร้ายแรงของ PHP: ข้อผิดพลาดที่ไม่ได้ตรวจสอบ: การเรียกไปยังฟังก์ชันสมาชิก id() เป็นโมฆะใน /var/www/html/web/modules/custom/my_menu/src/Routing/RouteSubscriber.php:31                                                                                                                
การติดตามสแต็ก:                                                                                                                                                                                                                                                           
#0 /var/www/html/web/core/lib/Drupal/Core/Routing/RouteSubscriberBase.php(37): Drupal\my_menu\Routing\RouteSubscriber->alterRoutes(Object(Symfony\Component\Routing\RouteCollection))                                                                                  
#1 [ฟังก์ชันภายใน]: Drupal\Core\Routing\RouteSubscriberBase->onAlterRoutes(Object(Drupal\Core\Routing\RouteBuildEvent), 'routing.route_a...', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))                                              
#2 /var/www/html/web/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(142): call_user_func(Array, Object(Drupal\Core\Routing\RouteBuildEvent), 'routing.route_a... ', วัตถุ (Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher))
#3 /var/www/html/web/core/lib/Drupal/Core/Routing/RouteBuilder.php(189): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object(Drupal\Core\Routing\RouteBuildEvent), 'routing.route_a...')                                                   
 ใน /var/www/html/web/modules/custom/my_menu/src/Routing/RouteSubscriber.php ในบรรทัดที่ 31       
มีวิธีอื่นในการรับค่าหรือไม่? ผมทำอะไรผิดหรือเปล่า.
นี่คือรหัสของฉัน
<?php
เนมสเปซ Drupal\my_menu\Routing;
ใช้ Drupal\Core\Routing\RouteSubscriberBase;
ใช้ Drupal\Core\Routing\RoutingEvents;
ใช้ Symfony\Component\Routing\RouteCollection;
ใช้ Drupal\Core\Routing\RouteMatchInterface;
/**
 * คลาส RouteSubscriber
 *
 * ซ่อนองค์ประกอบการแก้ไขเมนูสำหรับผู้ที่ไม่ใช่ผู้ดูแลระบบ
 *
 * @package Drupal\hw_menu\Routing
 */
คลาส RouteSubscriber ขยาย RouteSubscriberBase {
  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ alterRoutes (RouteCollection $collection) {
    ถ้า ($route = $collection->get('entity.menu.add_link_form')) {
  // dpm($route->getRequirements());
      ตัวอย่าง $menu \Drupal\system\Entity\Menu;
      $menu = \Drupal::routeMatch()->getParameter('เมนู');
      if($menu->id() != 'โฟกัส') {
        $route->setRequirement('_role', 'administrator');
      }
    // dpm($route->getRequirements());
    }
  }
  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นคงที่สาธารณะ getSubscribedEvents () {
    // เรียกใช้หลังจาก content_translation ซึ่งมีลำดับความสำคัญ -210
    $events[RoutingEvents::ALTER] = ['onAlterRoutes', -230];
    ส่งคืนเหตุการณ์ $;
  }
}