Tôi đang cố gắng hạn chế quyền truy cập đối với người dùng không phải quản trị viên trên quản trị viên/cấu trúc/menu để chỉ quản trị viên mới có thể tạo bất kỳ liên kết mới nào qua quản trị viên/cấu trúc/menu.
Bây giờ tôi muốn rằng đối với một menu đặc biệt có ID "Tiêu điểm", nút "Thêm liên kết" cũng có sẵn cho một vai trò khác.
Đây là Ảnh chụp màn hình của chương trình phụ trợ thực tế với "Thêm liên kết" vẫn khả dụng. Tôi muốn tính năng này biến mất đối với Hauptnavigation chứ không phải đối với Fokusnavigation.
Điều tương tự khi bạn nhấp vào Menu. Bạn nhận được nút "Thêm liên kết". Tôi có thể tắt tính năng này bằng mã bên dưới, nhưng tôi không biết cách cho phép lại tính năng này đối với các Vai trò không phải Quản trị viên.
Tôi có thể lấy menu->id() trong tệp my_menu.module, với mã giống như trong trình đăng ký định tuyến bên dưới nhưng không hiểu sao nó không hoạt động trong trình đăng ký tuyến.
Drush CR trả về một
PHP Fatal error: Uncaught Error: Call to a member function id() on null in /var/www/html/web/modules/custom/my_menu/src/Routing/RouteSubscriber.php:31
Dấu vết ngăn xếp:
#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 [chức năng nội bộ]: 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... ', Đối tượng (Drupal\Thành phần\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...')
trong /var/www/html/web/modules/custom/my_menu/src/Routing/RouteSubscriber.php trên dòng 31
Có những cách khác để có được giá trị? Tôi đang làm gì sai.
Đây là mã của tôi.
<?php
không gian tên Drupal\my_menu\Routing;
sử dụng Drupal\Core\Routing\RouteSubscriberBase;
sử dụng Drupal\Core\Routing\RoutingEvents;
sử dụng Symfony\Component\Routing\RouteCollection;
sử dụng Drupal\Core\Routing\RouteMatchInterface;
/**
* Lớp RouteSubscriber
*
* ẩn các thành phần chỉnh sửa menu cho những người không phải quản trị viên
*
* @package Drupal\hw_menu\Routing
*/
lớp RouteSubscriber mở rộng RouteSubscriberBase {
/**
* {@inheritdoc}
*/
chức năng công cộng alterRoutes(RouteCollection $collection) {
if ($route = $collection->get('entity.menu.add_link_form')) {
// dpm($route->getRequirements());
$menu instanceof \Drupal\system\Entity\Menu;
$menu = \Drupal::routeMatch()->getParameter('menu');
if($menu->id() != 'tiêu điểm') {
$route->setRequirement('_vai trò', 'quản trị viên');
}
// dpm($route->getRequirements());
}
}
/**
* {@inheritdoc}
*/
hàm tĩnh công khai getSubscribeEvents() {
// Chạy theo content_translation, cái này có priority -210.
$events[RoutingEvents::ALTER] = ['onAlterRoutes', -230];
trả lại sự kiện $;
}
}