当前位置: 首页 > 面试题库 >

禁用Laravel错误处理程序

郤玉书
2023-03-14
问题内容

反正有一起禁用laravel错误处理程序吗?

我想简单的显示 标准的PHP错误没有Whoops, looks like something went wrong错误。


问题答案:

并非没有主要违反框架原理的问题(如果您仍然感兴趣,我将在下面告诉您如何做)。

有一些事情使这很难完成。取消默认错误和异常处理程序很容易

set_error_handler(null);
set_exception_handler(null);

但这给您带来两个主要障碍。

第一个是Laravel在其引导过程中注册了一个关闭处理程序,该关闭功能将查找最后一个错误,如果是致命错误,请手动调用异常处理代码。

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

#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的显示错误ini设置为1。这样可以确保将错误输出到浏览器。

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

最后,我们用$app类实例化的对象替换实际的Laravel 对象。

在应用程序类本身中,我们将其删除startExceptionHandling。这样可以防止Laravel设置自定义异常,错误和关闭回调。我们还定义handle了从try
/ catch中删除应用程序的启动/调度。这是该过程中最脆弱的部分,根据您的Laravel版本,外观可能有所不同。

最终警告

如果handle方法在将来的Laravel版本中更改,则将中断。

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

除了临时调试技术外,我建议不要使用此方法



 类似资料:
  • 我正在使用Laravel 5.5,并试图实现用户和管理员的多重身份验证。我得到这个错误时,我试图调用管理员登录表单在浏览器。 错误: 声明应用\Exceptions\Handler::未经身份验证($请求,应用\Exceptions\身份验证异常$异常)应与Illumate\Foundation\Exceptions\Handler兼容::未经身份验证($请求,Illumate\Auth\身份验证

  • 通过对错误类型实现 Display 和 From,我们能够利用上绝大部分标准库错误处理工具。然而,我们遗漏了一个功能:轻松 Box 我们错误类型的能力。 标准库会自动通过 Form 将任意实现了 Error trait 的类型转换成 trait 对象 Box<Error> 的类型(原文:The std library automatically converts any type that imp

  • 对于一个优秀的框架来说,正确的异常处理可以防止暴露自身接口给用户,可以提供快速追溯问题的提示给开发人员。本文会详细的介绍 laravel 异常处理的源码。 PHP 异常处理 本章节参考 PHP错误异常处理详解。 异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法。    异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑汁去考虑各种错误,这为处

  • 我正在做一个RESTAPI项目<我在为一个问题挣扎。当我得到令牌过期错误时,生成的代码如下所示: 这段代码写在这个文件中: 供应商/tymon/jwt-auth/src/Http/Middleware/BaseMiddleware.php 如何将其作为JSON类型返回?

  • 我已经尝试禁用Spring boot W/C抛出的默认错误处理 {“时间戳”:1575346220347,“状态”:500,“错误”:“内部服务器错误”,“异常”:“org.springframework.web.client.httpclienterroreXception”,“消息”:“401未经授权”,“路径”:“/auth/login”} 和 但是我得到的是一堆HTML格式的响应,而不是应

  • 问题内容: 与其他框架相比,Node.js + Express.js应用程序中的错误报告/处理似乎有所不同。我理解它的工作原理是否正确? A) 通过接收错误作为回调函数的参数来 检测 错误。例如: B) 通过调用next(err) 报告 MIDDLEWARE中的​​错误。例: C) 通过抛出错误来 报告 路由中的错误。例: d) 手柄 通过配置通过app.error自己的错误处理的错误()或使用通