Réponses:
Vous pouvez lever une exception à tout moment dans votre code:
403:
throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();
404:
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();
L'exception est ensuite interceptée par DefaultExceptionHtmlSubscriber et une sous-demande pour /system/403
ou /system/404
est renvoyée, que vous pouvez configurer dans les paramètres de base du site si vous ne souhaitez pas afficher une page générique "accès refusé" ou "introuvable".
Les autres options dépendent de l'endroit où le code est placé:
Renvoyer une réponse 403 ou 404 à partir d'un contrôleur ou d'un formulaire
Définissez une réponse dans un événement si vous êtes abonné à un événement.
Ce que vous ne devriez jamais faire, c'est envoyer une réponse directement. Cela n'arrête pas le code et produit deux réponses, une que vous avez envoyée et une retournée par le noyau Drupal. Cela entraînera un comportement imprévisible.
Créez votre redirection à partir de l'itinéraire d'accès refusé du système.
$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());
Cela vous amène à la page d'accès standard Drupal refusée. L'itinéraire est défini dans system.routing.yml
in core.
La première réponse vous donnera un accès refusé basé sur un navigateur, ce qui peut être ce que vous recherchez. Si vous souhaitez que votre interface utilisateur Drupal s'affiche, utilisez ce qui précède.
À partir d'une page, vous pouvez utiliser:
return new \Symfony\Component\HttpFoundation\RedirectResponse(\Drupal::url('your.module.route.name'));
comme: http://www.drupal8.ovh/en/tutoriels/88/page-redirection-on-drupal-8
Ou à partir d'une soumission:
$form_state->setRedirect('your.module.route.name');
Ensuite, configurez l'autorisation d'accès de «your.module.route.name»
Si vous ne savez pas comment configurer la permission d'accès, consultez: http://www.drupal8.ovh/en/tutoriels/66/create-a-custom-permission-drupal-8
return new Response('', Response::HTTP_FORBIDDEN);