laravel中有哪些异常

laravel中的异常有:1、“E_ERROR”致命运行时错误,不可恢复,会导致脚本终止不再继续运行;2、“E_WARNING”运行时警告“非致命错误”;3、“E_PARSE”编译时语法解析错误;4、“E_CORE_ERROR”初始化启动过程中发生的致命错误;5、“E_COMPILE_ERROR”致命编译时错误;6、“E_RECOVERABLE_ERROR”可被捕捉的致命错误。

laravel中有哪些异常

本教程操作环境:windows7系统、Laravel9版,DELL G3电脑。

laravel中的异常级别

常量 说明

E_ERROR致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。E_WARNING运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。E_PARSE编译时语法解析错误。解析错误仅仅由分析器产生。E_NOTICE运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。E_CORE_ERROR在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的。E_CORE_WARNINGPHP 初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的。E_COMPILE_ERROR致命编译时错误。类似 E_ERROR, 但是是由 Zend 脚本引擎产生的。E_COMPILE_WARNING编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。E_USER_ERROR用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用 PHP 函数 trigger_error () 来产生的。E_USER_WARNING用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用 PHP 函数 trigger_error () 来产生的。E_USER_NOTICE用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用 PHP 函数 trigger_error () 来产生的。E_STRICT启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。E_RECOVERABLE_ERROR可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致 PHP 引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler ()),将成为一个 E_ERROR 从而脚本会终止运行。E_DEPRECATED运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。E_USER_DEPRECATED用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用 PHP 函数 trigger_error () 来产生的。E_ALL用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用 PHP 函数 trigger_error () 来产生的。

Laravel 异常处理

laravel 的异常处理由类 IlluminateFoundationBootstrapHandleExceptions::class 完成:

class HandleExceptions{    public function bootstrap(Application $app)    {        $this->app = $app;        error_reporting(-1);        set_error_handler([$this, 'handleError']);        set_exception_handler([$this, 'handleException']);        register_shutdown_function([$this, 'handleShutdown']);        if (! $app->environment('testing')) {            ini_set('display_errors', 'Off');        }    }}

异常转化

laravel 的异常处理均由函数 handleException 负责。

PHP7 实现了一个全局的 throwable 接口,原来的 Exception 和部分 Error 都实现了这个接口, 以接口的方式定义了异常的继承结构。于是,PHP7 中更多的 Error 变为可捕获的 Exception 返回给开发者,如果不进行捕获则为 Error ,如果捕获就变为一个可在程序内处理的 Exception。这些可被捕获的 Error 通常都是不会对程序造成致命伤害的 Error,例如函数不存在。

PHP7 中,基于 /Error exception,派生了 5 个新的 engine exception:ArithmeticError / AssertionError / DivisionByZeroError / ParseError / TypeError。在 PHP7 里,无论是老的 /Exception 还是新的 /Error ,它们都实现了一个共同的 interface: /Throwable。

因此,遇到非 Exception 类型的异常,首先就要将其转化为 FatalThrowableError 类型:

public function handleException($e){    if (! $e instanceof Exception) {        $e = new FatalThrowableError($e);    }    $this->getExceptionHandler()->report($e);    if ($this->app->runningInConsole()) {        $this->renderForConsole($e);    } else {        $this->renderHttpResponse($e);    }}

FatalThrowableError 是 Symfony 继承 ErrorException 的错误异常类:

有道小P 有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64 查看详情 有道小P

class FatalThrowableError extends FatalErrorException{    public function __construct(Throwable $e)    {        if ($e instanceof ParseError) {            $message = 'Parse error: '.$e->getMessage();            $severity = E_PARSE;        } elseif ($e instanceof TypeError) {            $message = 'Type error: '.$e->getMessage();            $severity = E_RECOVERABLE_ERROR;        } else {            $message = $e->getMessage();            $severity = E_ERROR;        }        ErrorException::__construct(            $message,            $e->getCode(),            $severity,            $e->getFile(),            $e->getLine()        );        $this->setTrace($e->getTrace());    }}

异常 Log

当遇到异常情况的时候,laravel 首要做的事情就是记录 log,这个就是 report 函数的作用。

protected function getExceptionHandler(){    return $this->app->make(ExceptionHandler::class);}

laravel 在 Ioc 容器中默认的异常处理类是 IlluminateFoundationExceptionsHandler:

class Handler implements ExceptionHandlerContract{    public function report(Exception $e)    {        if ($this->shouldntReport($e)) {            return;        }        try {            $logger = $this->container->make(LoggerInterface::class);        } catch (Exception $ex) {            throw $e; // throw the original exception        }        $logger->error($e);    }    protected function shouldntReport(Exception $e)    {        $dontReport = array_merge($this->dontReport, [HttpResponseException::class]);        return ! is_null(collect($dontReport)->first(function ($type) use ($e) {            return $e instanceof $type;        }));    }}

异常页面展示

记录 log 后,就要将异常转化为页面向开发者展示异常的信息,以便查看问题的来源:

protected function renderHttpResponse(Exception $e){    $this->getExceptionHandler()->render($this->app['request'], $e)->send();}class Handler implements ExceptionHandlerContract{    public function render($request, Exception $e)    {        $e = $this->prepareException($e);        if ($e instanceof HttpResponseException) {            return $e->getResponse();        } elseif ($e instanceof AuthenticationException) {            return $this->unauthenticated($request, $e);        } elseif ($e instanceof ValidationException) {            return $this->convertValidationExceptionToResponse($e, $request);        }        return $this->prepareResponse($request, $e);    }}

对于不同的异常,laravel 有不同的处理,大致有 HttpException、HttpResponseException、AuthorizationException、ModelNotFoundException、AuthenticationException、ValidationException。由于特定的不同异常带有自身的不同需求,本文不会特别介绍。本文继续介绍最普通的异常 HttpException 的处理:

protected function prepareResponse($request, Exception $e){    if ($this->isHttpException($e)) {        return $this->toIlluminateResponse($this->renderHttpException($e), $e);    } else {        return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e);    }}protected function renderHttpException(HttpException $e){    $status = $e->getStatusCode();    view()->replaceNamespace('errors', [        resource_path('views/errors'),        __DIR__.'/views',    ]);    if (view()->exists("errors::{$status}")) {        return response()->view("errors::{$status}", ['exception' => $e], $status, $e->getHeaders());    } else {        return $this->convertExceptionToResponse($e);    }}

对于 HttpException 来说,会根据其错误的状态码,选取不同的错误页面模板,若不存在相关的模板,则会通过 SymfonyResponse 来构造异常展示页面:

protected function convertExceptionToResponse(Exception $e){    $e = FlattenException::create($e);    $handler = new SymfonyExceptionHandler(config('app.debug'));    return SymfonyResponse::create($handler->getHtml($e), $e->getStatusCode(), $e->getHeaders());}protected function toIlluminateResponse($response, Exception $e){    if ($response instanceof SymfonyRedirectResponse) {        $response = new RedirectResponse($response->getTargetUrl(), $response->getStatusCode(), $response->headers->all());    } else {        $response = new Response($response->getContent(), $response->getStatusCode(), $response->headers->all());    }    return $response->withException($e);}

【相关推荐:laravel视频教程】

以上就是laravel中有哪些异常的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/341012.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式
上一篇 2026年11月8日 18:23:34
CSS导航栏高亮:正确区分.active类与:active伪类
下一篇 2025年12月23日 18:18:11

相关推荐

  • 如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式

    如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式如何用VSCode为Laravel构建模块化API结构 Laravel多模块接口开发管理方式

    laravel需要模块化api结构以提升大型项目的可维护性、团队协作效率及未来扩展性。模块化将应用拆分为独立功能单元,每个模块包含路由、控制器、模型等组件,通过vscode可高效管理目录结构与代码。具体步骤包括:1. 定义清晰的模块目录结构,如app/modules/module/controlle…

    2026年11月8日 • 用户投稿
    000
  • laravel是aop吗

    laravel是aop吗laravel是aop吗laravel是aop吗laravel是aop吗

    laravel不是aop;aop是“Aspect Oriented Programming”的缩写,意为面向切面编程,是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,而laravel不是面向切片编程,laravel中间件提供了一种方便的机制来检查和过滤进入应用程序的HTTP请求是…

    2026年11月8日 • 用户投稿
    100
  • 聊聊Laravel中的拦截器(Gates)

    聊聊Laravel中的拦截器(Gates)聊聊Laravel中的拦截器(Gates)聊聊Laravel中的拦截器(Gates)聊聊Laravel中的拦截器(Gates)

    Laravel Gates(拦截器)允许你授权用户访问应用程序的某些区域。你可以轻松地在应用程序中定义拦截器,然后使用它们来允许或拒绝访问。 简单示例 假设在用户表中,有一个名为 admin 的列,根据用户是否是管理员,它可以是 1 或 0。我们可以通过如下简单的检查来轻松保护应用程序的一部分模块:…

    2026年11月8日 • 用户投稿
    000
  • 聊聊Laravel代码中怎么正确地使用数据库事务

    聊聊Laravel代码中怎么正确地使用数据库事务聊聊Laravel代码中怎么正确地使用数据库事务聊聊Laravel代码中怎么正确地使用数据库事务聊聊Laravel代码中怎么正确地使用数据库事务

    在 web 开发中,数据的完整性和准确性非常重要。因此,必须确保我们编写的代码能够以安全的方式存储、更新和删除数据库中的数据。 在本文中,我们将看看什么是数据库事务,为什么它们很重要,以及如何在 Laravel 开始使用它们。我们还将研究一个常见的“问题”,涉及队列和数据库事务。 什么是数据库事务?…

    2026年11月8日 • 用户投稿
    000
  • 一文详解Laravel中怎么进行异常处理

    一文详解Laravel中怎么进行异常处理一文详解Laravel中怎么进行异常处理一文详解Laravel中怎么进行异常处理一文详解Laravel中怎么进行异常处理

    在本文中,我们将探讨 Laravel Web 框架中最重要和最少讨论的功能之一 – 异常处理。 Laravel 带有一个内置的异常处理程序,可以让您轻松地以友好的方式报告和呈现异常。 在文章的前半部分,我们将探讨异常处理程序提供的默认设置。 事实上,我们首先会通过默认的 Handler …

    2026年11月8日 • 用户投稿
    000
  • 【整理分享】40 条实用的 Laravel 表单验证规则

    【整理分享】40 条实用的 Laravel 表单验证规则【整理分享】40 条实用的 Laravel 表单验证规则【整理分享】40 条实用的 Laravel 表单验证规则【整理分享】40 条实用的 Laravel 表单验证规则

                                                                                    Laravel 的验证系统有 60多个验证规则可用,但是如果你需要其他的功能怎么办?你可以 轻松创建自己的验证规则, 也可以使用互联网上已有…

    2026年11月8日 • 用户投稿
    000
  • Laravel8如何进行性能优化?优化技巧分享

    Laravel8如何进行性能优化?优化技巧分享Laravel8如何进行性能优化?优化技巧分享Laravel8如何进行性能优化?优化技巧分享Laravel8如何进行性能优化?优化技巧分享

    本指南列出了从快速优化到深度调优的各种性能优化技巧,这些技巧可以帮助构建高性能的 Laravel 应用。 在 Enlightn 上有不少同学在帮助我们编写了本指南。如果你正在寻求 Laravel 的自动化性能或安全工具,不妨可以访问这个网站看看。 为什么要提高性能? 毫无疑问,相比加载速度慢的应用程…

    2026年11月8日 • 用户投稿
    000
  • laravel中怎么查看系统磁盘空间使用量?(方法介绍)

    laravel中怎么查看系统磁盘空间使用量?(方法介绍)laravel中怎么查看系统磁盘空间使用量?(方法介绍)laravel中怎么查看系统磁盘空间使用量?(方法介绍)laravel中怎么查看系统磁盘空间使用量?(方法介绍)

    在这篇文章中我会向你展示如何在 laravel 中查看磁盘占用情况,以及服务器的剩余内存。很多时候我们需要在管理员面板上查看服务器的磁盘剩余空间,而我们现在都是手动查看磁盘是否已经存满。在这个教程中,我会教你如何在 laravel 中查看磁盘占用情况,这样你就可以在管理员端直接查看了。你也可以在 u…

    2026年11月8日 • 用户投稿
    500
  • 分享一个Laravel编码格式化工具:Laravel Pint

    分享一个Laravel编码格式化工具:Laravel Pint分享一个Laravel编码格式化工具:Laravel Pint分享一个Laravel编码格式化工具:Laravel Pint分享一个Laravel编码格式化工具:Laravel Pint

    本篇文章带大家了解一下官方新项目 laravel pint,一个基于 php-cs-fixer 专为 laravel 优化的编码格式化工具,希望对大家有所帮助! 期待已久的炒作终于结束了,Laravel 最新的开源 CLI 应用程序已经发布到世界各地,我们已经着手介绍它——Laravel Pint。…

    2026年11月8日 • 用户投稿
    100
  • Laravel 9.35 发布啦!看看都有哪些新变化?

    下面由laravel教程栏目给大家介绍关于最新发布的laravel 9.35版本都有哪些变化,希望对大家有所帮助!                                                                                 Laravel 团队发布…

    2026年11月8日
    000
  • 聊聊Laravel中怎么用Saloon进行API集成

    聊聊Laravel中怎么用Saloon进行API集成聊聊Laravel中怎么用Saloon进行API集成聊聊Laravel中怎么用Saloon进行API集成聊聊Laravel中怎么用Saloon进行API集成

    laravel中怎么用saloon进行api集成?下面本篇文章给大家介绍一下在laravel中使用saloon进行api集成的方法,希望对大家有所帮助! 我们都去过那里,我们想与 Laravel 中的第三方 API 集成,我们问自己「我应该怎么做?」。 谈到 API 集成,我并不陌生,但每次我都想知…

    2026年11月8日 • 用户投稿
    100
  • Laravel扩展推荐:角色和权限管理工具“Bouncer”

    Laravel扩展推荐:角色和权限管理工具“Bouncer”Laravel扩展推荐:角色和权限管理工具“Bouncer”Laravel扩展推荐:角色和权限管理工具“Bouncer”Laravel扩展推荐:角色和权限管理工具“Bouncer”

    经过多年开发,56 次发布,130 万下载,并且超过 2800 的主动关注 Bouncer 终于来到了 1.0 版本。 在相当长的一段时间里,它一直非常可靠和稳定,并被世界各地无数的 app 用于生产。 这是我个人的更新,包含了我多年来的一些思考 —— 从最初到最终发行。关于如何每天使用 Bounc…

    2026年11月8日 • 用户投稿
    000
  • PHP laravel缓存cache机制详解

    PHP laravel缓存cache机制详解PHP laravel缓存cache机制详解PHP laravel缓存cache机制详解PHP laravel缓存cache机制详解

    本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于laravel中的cache为我们提供了三种缓存机制:redis,memcache,以及框架的文件缓存的相关内容,下面一起来看一下,希望对大家有帮助。 【相关推荐:laravel视频教程】 Laravel中的cache为我们提供了三…

    2026年11月8日 • 用户投稿
    100
  • 最新的Laravel 9.37发布了,带来这些新变化!

    最新的Laravel 9.37发布了,带来这些新变化!最新的Laravel 9.37发布了,带来这些新变化!最新的Laravel 9.37发布了,带来这些新变化!最新的Laravel 9.37发布了,带来这些新变化!

                                                                                    laravel团队在这周发布了 9.37 版本并且同时在 9.37 与  laravel 9.36 之间发布了一些补丁。本周得发布添加了对使…

    2026年11月8日 • 用户投稿
    100
  • Laravel扩展推荐:导航元素工具“Laravel Navigation”

    Laravel扩展推荐:导航元素工具“Laravel Navigation”Laravel扩展推荐:导航元素工具“Laravel Navigation”Laravel扩展推荐:导航元素工具“Laravel Navigation”Laravel扩展推荐:导航元素工具“Laravel Navigation”

    本篇文章给大家分享一个laravel扩展:laravel navigation包,介绍一下怎么利用laravel navigation 轻松构建站点导航元素,希望对大家有所帮助! Laravel Navigation 是 Spatie 的一个包,用于管理 Laravel 应用程序中的菜单、面包屑和其…

    2026年11月8日 • 用户投稿
    200
  • laravel9 和 laravels 性能大比拼!

    laravel9 和 laravels 性能大比拼!laravel9 和 laravels 性能大比拼!laravel9 和 laravels 性能大比拼!laravel9 和 laravels 性能大比拼!

    前言:最近想使用 swoole 试试 websocket, 正好安装测试下 laravel 和 swoole 性能,不知道是不是 laravel9 性能优化的好,最后压测结果和 laravels 的差不多~ laradock 安装 swoole 动手操作后遇到问题: 因为原先的 PHP 版本是 7.…

    2026年11月8日 • 用户投稿
    100
  • 尝试怎么将Laravel改成Swoole版

    本篇文章给大家laravel和swoole的相关知识,主要内容是教大家怎么将laravel改成swoole版(尝试学习,不建议更改现有项目),下面一起来看看吧,希望对大家有所帮助! 前言 不建议生产环境使用 创建一个新的 laravel 项目 laravel new swoole-laravel 将…

    2026年11月8日
    000
  • Laravel怎么优化性能?18个优化必备知识分享

    Laravel怎么优化性能?18个优化必备知识分享Laravel怎么优化性能?18个优化必备知识分享Laravel怎么优化性能?18个优化必备知识分享Laravel怎么优化性能?18个优化必备知识分享

    Laravel 是一个流行的开源 PHP 框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端 Web 应用程序的绝佳选择。 如今,没有一个 PHP 开发人员不受 Laravel 的影响。他们要么是喜欢 Laravel 提供的快速开发的初级或中级开发人员,要么…

    2026年11月8日 • 用户投稿
    300
  • 如何通过Laravel实现Web推送通知?使用Composer可以轻松搞定!

    可以通过以下地址学习 Composer:学习地址 在开发一个需要实时通知用户的应用时,我遇到了一个问题:如何在不打扰用户的前提下,及时将重要信息推送给他们?经过一番研究和尝试,我发现使用 laravel 结合 web 推送通知是一个理想的解决方案。然而,实现这一功能并不简单,直到我找到了 larav…

    2026年11月8日
    000
  • 如何解决Laravel大文件上传问题?使用pion/laravel-chunk-upload可以!

    可以通过一下地址学习composer:学习地址 在开发一个允许用户上传大文件的laravel项目时,我遇到了一个常见的问题:上传大文件时,常常会导致内存溢出或超时错误。这不仅影响用户体验,还可能导致系统崩溃。经过一番探索,我发现了一个非常有用的工具:pion/laravel-chunk-upload…

    2026年11月8日
    900

发表回复

登录后才能评论
关注微信