以编程方式将用户重定向到默认的“访问受限”


12

我想以编程方式将用户重定向到默认的“访问受限”页面。我知道我需要一个“ RedirectResponse”对象来进行简单的重定向,但是如何在此处指定默认的“访问受限”页面?


1
通常,通过返回403状态代码而不是重定向到另一个页面来生成“访问受限”页面。您是否尝试过类似的方法return new Response('', Response::HTTP_FORBIDDEN);
Pierre Buyle,2016年

Answers:


24

您可以在代码中的任何时候抛出异常:

403:

throw new \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException();

404:

throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException();

然后,该异常将被DefaultExceptionHtmlSubscriber捕获,并返回/system/403/system/404返回一个子请求,如果您不想显示通用的“拒绝访问”或“未找到”页面,则可以在基本站点设置中对其进行配置。

其他选项取决于代码的放置位置:

  • 从控制器或表单返回403或404响应

  • 如果您在事件订阅者中,请在事件中设置响应。

您绝对不应该直接发送回复。这不会停止代码并产生两个响应,一个已发送,一个由Drupal内核返回。这将导致不可预测的行为。


2

这似乎是正确的方法:

    $response = new RedirectResponse('/system/403');
    $event->setResponse($response);

2

从系统的拒绝访问路由建立重定向。

$url = Url::fromRoute('system.403');
$response = new RedirectResponse($url->toString());

这将带您到Drupal标准访问被拒绝页面。路由system.routing.yml在核心中定义。

最佳答案将为您提供基于浏览器的访问拒绝访问功能,看上去很糟糕,这可能正是您想要的。如果要显示Drupal UI,请使用上面的内容。


0

在页面中,您可以使用:

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


我已经尝试$ response = new Response('',Response :: HTTP_FORBIDDEN); $ event-> setResponse($ response); 这仅向用户显示白页。信息太少了。我想显示来自Drupal的默认“拒绝访问”页面。
jepster 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.