Відповіді:
Ви можете викинути виняток у будь-якій точці коду:
403:
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
404:
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
Потім виняток перехоплюється DefaultExceptionHtmlSubscriber та підзапит на /system/403
або /system/404
повертається, який ви можете налаштувати в основних налаштуваннях сайту, якщо ви не хочете відображати загальну сторінку "доступ заборонено" або "не знайдено".
Інші параметри залежать від місця розміщення коду:
Поверніть відповідь 403 або 404 від контролера або форми
Встановіть відповідь на подію, якщо ви підписалися на подію.
Що ніколи не слід робити, це направити відповідь безпосередньо. Це не зупиняє код і видає два відповіді, один ви надіслали, а один повернуто ядром Drupal. Це призведе до непередбачуваної поведінки.
Створіть свою переадресацію з маршруту, яким заборонено доступ до системи.
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
Це відведеть вас до сторінки забороненого доступу до стандартного доступу до Drupal. Маршрут визначений system.routing.yml
в ядрі.
Верхня відповідь дасть вам зруйнований доступ до браузера на основі браузера, який може бути те, що ви шукаєте. Якщо ви хочете, щоб ваш Drupal користувальницький інтерфейс відображався, використовуйте вищесказане.
На сторінці ви можете використовувати:
return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));
як-от: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8
Або з відправника:
$form_state->setRedirect('your.module.route.name');
Потім налаштуйте дозвіл доступу на "your.module.route.name"
Якщо ви не знаєте, як налаштувати дозвіл на доступ, перевірте: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8
return new Response('', Response::HTTP_FORBIDDEN);