Câu trả lời:
Bạn có thể ném một ngoại lệ tại bất kỳ điểm nào trong mã của bạn:
403:
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
404:
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
Sau đó, ngoại lệ được bắt gặp bởi DefaultExceptionHtmlSubscacker và một yêu cầu con cho /system/403
hoặc /system/404
được trả lại, bạn có thể định cấu hình trong cài đặt trang cơ bản nếu bạn không muốn hiển thị trang "truy cập bị từ chối" hoặc "không tìm thấy" chung chung.
Các tùy chọn khác phụ thuộc vào vị trí đặt mã:
Trả về phản hồi 403 hoặc 404 từ bộ điều khiển hoặc biểu mẫu
Đặt phản hồi trong một sự kiện nếu bạn đang ở trong một thuê bao sự kiện.
Điều bạn không bao giờ nên làm là gửi phản hồi trực tiếp. Điều này không dừng mã và tạo ra hai phản hồi, một phản hồi bạn đã gửi và một trả về bởi nhân Drupal. Điều này sẽ dẫn đến hành vi không thể đoán trước.
Xây dựng chuyển hướng của bạn từ tuyến truy cập bị từ chối của hệ thống.
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
Điều này sẽ đưa bạn đến trang bị từ chối truy cập tiêu chuẩn Drupal. Các tuyến đường được xác định system.routing.yml
trong lõi.
Câu trả lời hàng đầu sẽ cung cấp cho bạn một trình duyệt tìm kiếm bị từ chối dựa trên Access Denied, đây có thể là những gì bạn đang tìm kiếm. Nếu bạn muốn giao diện người dùng Drupal của bạn hiển thị, hãy sử dụng ở trên.
Từ một trang, bạn có thể sử dụng:
return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));
như: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8
Hoặc từ một từ trình:
$form_state->setRedirect('your.module.route.name');
Sau đó định cấu hình quyền truy cập của 'your.module.route.name'
Nếu bạn không biết cách định cấu hình quyền truy cập, hãy kiểm tra: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom- allow-dalal-8
return new Response('', Response::HTTP_FORBIDDEN);