Respostas:
Você pode lançar uma exceção em qualquer ponto do seu código:
403:
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
404:
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
A exceção é capturada pelo DefaultExceptionHtmlSubscriber e uma sub-solicitação /system/403
ou /system/404
é retornada, que você pode configurar nas configurações básicas do site, se não desejar exibir uma página genérica de "acesso negado" ou "não encontrado".
Outras opções dependem de onde o código é colocado:
Retornar uma resposta 403 ou 404 de um controlador ou formulário
Defina uma resposta em um evento se você estiver em um assinante de evento.
O que você nunca deve fazer é enviar uma resposta diretamente. Isso não interrompe o código e produz duas respostas, uma que você enviou e outra retornada pelo kernel do Drupal. Isso resultará em comportamento imprevisível.
Crie seu redirecionamento a partir da rota de acesso negado do sistema.
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
Isso leva você à página de acesso padrão do Drupal negado. A rota é definida system.routing.yml
no núcleo.
A resposta principal fornecerá um acesso negado, baseado no navegador, negado, que pode ser o que você está procurando. Se você deseja que a interface do usuário do Drupal seja exibida, use o acima.
Em uma página, você pode usar:
return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));
como: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8
Ou a partir de um envio:
$form_state->setRedirect('your.module.route.name');
Em seguida, configure a permissão de acesso de 'your.module.route.name'
Se você não souber configurar a permissão de acesso, verifique: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8
return new Response('', Response::HTTP_FORBIDDEN);