Ответы:
Вы можете вызвать исключение в любой точке вашего кода:
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 UI показывал, используйте выше.
Со страницы вы можете использовать:
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);