Risposte:
Puoi generare un'eccezione in qualsiasi punto del codice:
403:
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
404:
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
L'eccezione viene quindi rilevata da DefaultExceptionHtmlSubscriber e viene restituita una richiesta secondaria /system/403
o /system/404
restituita, che è possibile configurare nelle impostazioni di base del sito se non si desidera visualizzare una pagina generica "accesso negato" o "non trovato".
Altre opzioni dipendono da dove si trova il codice:
Restituisce una risposta 403 o 404 da un controller o un modulo
Imposta una risposta in un evento se sei iscritto a un evento.
Quello che non dovresti mai fare è inviare una risposta direttamente. Questo non ferma il codice e produce due risposte, una che hai inviato e una restituita dal kernel Drupal. Ciò comporterà un comportamento imprevedibile.
Crea il reindirizzamento dalla route di accesso negata al sistema.
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
Questo ti porta alla pagina di accesso negato di Drupal standard. Il percorso è definito system.routing.yml
in core.
La risposta migliore ti darà un accesso negato basato su Accesso negato, che potrebbe essere quello che stai cercando. Se vuoi mostrare l'interfaccia utente di Drupal, usa quanto sopra.
Da una pagina, puoi usare:
return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));
come: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8
O da un da inviare:
$form_state->setRedirect('your.module.route.name');
Quindi configurare l'autorizzazione di accesso di "your.module.route.name"
Se non sai come configurare le autorizzazioni di accesso, controlla: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8
return new Response('', Response::HTTP_FORBIDDEN);