禁用 Laravel 内置的错误处理方法

2023-12-13

有没有办法一起禁用 Laravel 错误处理程序?

我想简单地显示标准 PHP 错误, not the Whoops, looks like something went wrong errors.


这会严重违反框架的原则(如果您仍然感兴趣,我将在下面告诉您如何做)。

有一些事情使得这一目标难以实现。取消设置默认错误和异常处理程序很容易

set_error_handler(null);
set_exception_handler(null);

但这给你留下了两个主要障碍。

第一个是 Laravel 注册一个关闭处理程序作为其引导的一部分,这个关闭函数将查找最后一个错误,如果是致命错误,则手动调用异常处理代码。有没有简单的方法来取消注册关闭功能.

第二个是,主要的 Laravel 应用程序处理程序如下所示

#File: vendor/laravel/framework/src/Illuminate/Foundation/Application.php
public function handle(SymfonyRequest $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
    try
    {
        $this->refreshRequest($request = Request::createFromBase($request));

        $this->boot();

        return $this->dispatch($request);
    }
    catch (\Exception $e)
    {
        if ($this->runningUnitTests()) throw $e;

        return $this['exception']->handleException($e);
    }
}

也就是说——如果你的应用程序代码抛出异常,Laravel 会在这里捕获它并手动调用异常的handleException方法(触发标准 Laravel 异常处理)。没有办法让 PHP 处理应用程序中发生的致命异常,Laravel 会阻止这种情况发生。

我告诉你如何做你想做的部分

所有这些意味着我们需要用我们自己的应用程序替换主要的 Laravel 应用程序。在bootstrap/start.php,有下面一行

#File: bootstrap/start.php
$app = new Illuminate\Foundation\Application;

将其替换为以下内容

ini_set('display_errors','1');
class MyApplication extends Illuminate\Foundation\Application
{
    function startExceptionHandling()
    {
        //do nothing
    }

    public function handle(Symfony\Component\HttpFoundation\Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
    {
        $this->refreshRequest($request = Request::createFromBase($request));

        $this->boot();

        return $this->dispatch($request);
    }    
}

$app = new MyApplication;

我们要做的第一件事是将 PHP 显示错误设置为1。这可确保将错误输出到浏览器。

接下来,我们定义一个新的应用程序类来扩展实际应用程序类。

最后我们替换掉真正的Laravel$app对象与我们的类实例化的对象。

在我们的应用程序类本身中,我们空白startExceptionHandling。这可以防止 Laravel 设置自定义异常、错误和关闭回调。我们还定义handle从 try/catch 中删除应用程序引导/调度。这是该过程中最脆弱的部分,并且可能看起来有所不同,具体取决于您的 Laravel 版本。

最后警告

If the handleLaravel 未来版本中的方法更改将打破这一点。

如果自定义包依赖于添加自定义异常处理程序,它们可能会崩溃。

我建议远离这种方法,而不是临时调试技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用 Laravel 内置的错误处理方法 的相关文章

随机推荐

  • 为什么上传alamofire后台请求不在后台执行?

    我使用 alamofire 将 30 mb zip 文件上传到服务器 这是我的要求 let configuration URLSessionConfiguration background withIdentifier identifire
  • 搜索和替换操作

    我有一个包含 URL 值的列表 例如 http farm6 static flickr com 5149 5684108566 aed8b9b52d s jpg 我怎样才能改变 s最后到 m对于所有发生的情况 尝试这个 str http f
  • Apache交叉编译错误./gen_test_char:无法执行二进制文件

    我花了很长时间才找到这个错误的解决方案 当尝试为 Arm 交叉编译 Apache 时 我确信这可能发生在许多其他架构上 我会从服务器文件夹中得到这个错误 gen test char cannot execute binary file 这意
  • @ngtools\webpack AOT 不起作用或在 95% 发射时冻结

    我一直在尝试让 AOT 与我的 Webpack 应用程序一起工作 ngtools webpack 有人能帮我吗 它似乎可以工作 但是 compiler js 仍然包含在捆绑包中 此外 它仍在寻找我的所有 html 文件 并在所有组件模板上获
  • C的隐藏特性

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我知道所有 C 编译器实现背后都有一个标准 因此不应该有任何隐藏功能 尽管如此 我确信所有 C 开发人员都有他们一直使用的隐藏 秘
  • 从 Python 中调用命名空间获取本地变量

    我想从被调用函数中检索 Python 的局部变量 有什么办法可以做到这一点吗 我意识到这对于大多数编程来说并不合适 但我基本上是在构建一个调试器 例如 def show locals put something in here that s
  • 在事件循环中共享队列

    是否可以在一个事件循环中的不同任务上共享 asyncio Queue 用例 两项任务正在队列上发布数据 一项任务正在从队列中获取新项目 所有任务都以异步方式进行 main py import asyncio import creator a
  • android numberpicker索引出界旋转

    我正在尝试创建一个自定义时间选择器 但遇到的问题是当我旋转屏幕时 另外 如果我按主页按钮离开应用程序 当我返回时出现相同的错误时 它会崩溃 public class MyTimePicker extends RelativeLayout p
  • 如何让执行 PHP 脚本的 Cronjob 运行时间超过 30 秒?

    我如何将其重写为每天运行超过 30 秒的 cron 另外 我需要编辑 htaccess or php ini文件在cron php目录说些什么 在浏览器上 它可以正常运行 30 秒以上 在外壳上 它也运行得很好 但作为一个 cron 设置的
  • 如何在 Eclipse 中使用引用的项目

    好吧 也许每个人都知道如何做到这一点 但我从来没有尝试过 因为我从来没有需要它 所以 你如何在 Eclipse 中处理多个引用的项目 我有几个 Struts 1 Web 应用程序 它们必须使用另一个 struts 1 库 项目 现在我正在使
  • 如何排除 Maven 插件中的依赖关系?

    我有一个项目需要以下 Maven jibx 插件
  • 在另一个 JNI 函数中使用时 Oop 被损坏

    问题是我们可以缓存吗jclass and jmethodID跨不同的 JNI 方法调用 当尝试使用缓存创建某个特定类的对象时 我遇到了一些奇怪的行为jclass and jmethodID来自另一个 JNI 方法调用 这是一个简单的例子 p
  • 在哪里可以找到一个好的 JavaScript/HTML AutoSuggest 示例 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找 JavaScr
  • 从派生类访问基类中的类型别名[重复]

    这个问题在这里已经有答案了 当尝试从派生类访问基类中的类型别名时 我面临以下问题 template
  • WebView动态插入/修改内容

    在我的应用程序中 我使用 WebView 来显示内容 现在是否可以动态修改内容 需求是这样的 我将从网络获取信息 并根据它们我需要设置样式 字体 属性 或者当连接的设备没有响应时我可能需要附加新文本 到目前为止我正在使用以下代码 void
  • Java webstart max-heap-size导致JVM无法启动

    我们在客户端使用 java web start 来构建基于 java swing 的应用程序 最近 当单击 jnlp 链接时 我们遇到了一个奇怪的 无法启动 java 虚拟机 错误 我们很快就发现了这一点 因为 jnlp 文件中的 max
  • 如何解决循环引用?

    如何解决循环引用问题 例如 A 类将 B 类作为其属性之一 而 B 类将 A 类作为其属性之一 架构师该如何解决这类问题呢 如果以NHibernate为例 对象之间就会存在父子关系 它如何处理这些父子场景 在大多数情况下 当我必须让两个事物
  • 使用 Paramiko 将文件从远程目录复制到远程子目录

    如何复制远程服务器中的文件 maindir fil1 txt到子目录 maindir subdir file1 txt 我使用 SFTP 实现paramiko 但它总是检查要复制的本地路径 filename full path maindi
  • 未找到类定义错误 (android)

    我正在开发一个应用程序 我可以启动我的启动器活动 它有两个按钮 单击这些按钮中的任何一个时 都应该打开一个新活动 但是 随后会发生运行时错误 import android app Activity import android conten
  • 禁用 Laravel 内置的错误处理方法

    有没有办法一起禁用 Laravel 错误处理程序 我想简单地显示标准 PHP 错误 not the Whoops looks like something went wrong errors 这会严重违反框架的原则 如果您仍然感兴趣 我将在