如何在 Drupal 模块中抛出 404 错误?

Posted

技术标签:

【中文标题】如何在 Drupal 模块中抛出 404 错误?【英文标题】:How to throw 404 error in Drupal module? 【发布时间】:2012-06-24 12:26:06 【问题描述】:

我需要在模块中抛出 404 错误。或者是否有可能为菜单挂钩设置所需的选项?

【问题讨论】:

【参考方案1】:

这很容易。这些应该负责看门狗、HTTP 404 响应代码和其他相关的事情。

对于 Drupal 6 和 7

在模块的页面回调中,执行:return drupal_not_found();

对于 Drupal 8

_controller定义中提到的class::method()中(即页面回调或负责为请求生成输出的方法),执行:

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

参考文献

drupal_not_found() documentation for Drupal 6。 drupal_not_found() documentation for Drupal 7。 NotFoundHttpException documentation for Drupal 8。

【讨论】:

谢谢。正是我需要的。 对于drupal 8 throw new NotFoundHttpException(); 见drupal.org/node/1616360 你需要命名空间,throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException(); 在 drupal 7 中,调用 return drupal_not_found() 会导致白屏死机。函数存在,显示错误启用,没有任何输出到 apache 错误日志文件。 在 Drupal 7 中,想要报告“找不到页面”消息的页面回调函数应该返回 MENU_NOT_FOUND 而不是调用 drupal_not_found()。【参考方案2】:

对于 Drupal 8

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
// then
throw new NotFoundHttpException();

【讨论】:

【参考方案3】:

MENU_NOT_FOUND应该在页面回调函数中返回。

想要报告“找不到页面”消息的页面回调函数应该返回 MENU_NOT_FOUND 而不是调用 drupal_not_found()。 — http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_not_found/7

【讨论】:

【参考方案4】:

查看 drupal_add_http_header() 函数以使用 HTTP 标头属性。还要确保将其粘贴在模块代码的顶部,以确保它首先执行。此外,您可能会发现这很有帮助。 https://www.drupal.org/project/generate_errors

【讨论】:

以上是关于如何在 Drupal 模块中抛出 404 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 java servlet 中抛出 404 错误?

获取请求在Angular 5 app中抛出404错误

如何编写一个期望在 Jasmine 中抛出“错误”的测试?

如何追溯python3.7中抛出的错误?

自定义管理命令在虚拟环境中抛出未找到模块错误

afterAll ReferenceError 中抛出错误:未定义模块,nodejs 中的 Karma/Jasmine 测试错误