Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
一文介绍Laravel Ignition的一切_创想鸟

一文介绍Laravel Ignition的一切

                                                                               

在这篇博客文章中,我将告诉你关于 ignition 的一切。

让我们看看默认情况下 PHP 中有什么。在不使用框架的情况下,PHP 提供了这个功能。您只会得到错误:没有堆栈跟踪、没有请求或应用程序详情。
PHP 错误

Symfony 的错误页面稍微好一些,它向您显示堆栈跟踪,但是没有多大帮助。

Symfony 错误

下面的截图是 Whoops,这是 Laravel 5 中的标准。它比默认的 Symfony 好得多,可以显示堆栈跟踪和一些关于请求的信息。尽管在 Laravel 中 Whoops 是默认值,但它是一个框架无关的(错误收集展示)。它仅仅显示通用信息。

Whoops 错误

这是 Ignition 的截图,我们建立的新的错误视图。因为这是 Laravel 特有的,我们可以做很多很酷的事情。

Ignition 错误

发现 Ignition

让我们来探索 Ignition 所有的细节。它是开源的,您可以在这里查看代码(https://github.com/facade/ignition)。

如果视图中有错误,这就是 whoops 显示它们的方式。注意,异常消息不适合分配的空间。你必须(鼠标)悬停在它上面才能看完整(信息)。在堆栈跟踪中,您可以看到使用了编译后的 Blade 视图和内容。这使得跟踪哪个 Blade 视图文件包含错误变得困难,并且视图内容本身是不可读的。

Whoops 视图错误

Ignition是一个 Laravel 特定的错误页面。因此,它可以像钩子一样,”挂载”到框架中, 用来显示未编译的视图路径和您的 Blade 视图。顶部还有足够的空间显示整个异常页面,不需要额外的单击。我们也只在默认情况下显示应用程序帧,因为这些可能是您感兴趣的帧。

Ignition 视图错误

如果您单击 stack trace 选项卡右侧文件名旁边的铅笔图标,我们将在您喜欢的编辑器中自动打开该文件。默认情况下是 PhpStorm 。您可以在 ignition 配置文件中将其配置为您最喜欢的编辑器。

注意到右上角的那个小“望远镜”链接了吗?我们只会在您安装了Laravel Telescope(第一方调试助手)的情况下显示。如果你点击那个链接,你将被带到望远镜内发生错误的异常。

黑暗模式

如果我们默认的错误屏幕太亮了,你会很高兴知道我们的错误页面也有一个黑暗模式。

Dark mode

Ignition 选项卡

让我们探索一下 Ignition 页面上显示的选项卡。

「请求」选项卡

Request tab

在「堆栈跟踪」选项卡旁边,您将看到「请求」选项卡。它显示了您对请求的所有预期信息。

假设你有一个路由定义是这样的::

Route::get('/posts/{post}', function (Post $post) {    //});

当此路由发生异常,我们将在 Ignition 中打印 路由参数 post 模型($post 变量),以转化后数组(toArray )形式呈现。对于不需要任何绑定的“简单”路由参数也是如此。这是一个很好的方法,可以很容易地看到 Laravel 为这个特定的路由接收了什么信息。

在路由参数之后,我们还将向您显示在此请求中使用的中间件列表。

接下来是“视图”部分。如果异常发生在视图中,我们将在这里显示视图名称。甚至:我们还将给出传递给视图的所有数据的列表。

用户选项卡

User tab

“用户” 选项卡包含有使用应用程序的用户和浏览器的更多信息。

上下文选项卡

上下文选项卡

在 Context  选项卡中,我们显示关于您的  repo  (repo位于何处,签出提交hash)和环境(您使用的 PHP 和 Laravel 的哪个版本)的信息。

调试选项卡

调试选项卡

在 Debug 选项卡中,我们将显示异常发生之前发生的事情。比如查询、日志和转储。在转储旁边,我们还显示您将 dump 语句放在何处的文件名。单击铅笔图标,您就可以直接访问该文件,并在您最喜欢的编辑器中纠正行号。

建议的解决方案

让我们来看一下另一个错误。这次我们将忘记导入 Class。Ignition 报错页面是这样的。

所以,Ignition 在看到异常是关于一个没有找到的 Class 时。它将尝试找出在其他命名空间中是否存在这个 Class。如果存在的话,它会建议我们导入。
Missing import solution

文心一言 文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

文心一言 1008 查看详情 文心一言

Ignition 自带一系列常见问题的解决方案。若没有找到Blade视图,会采用一个无效视图如下所示。

无效视图

您还可以自定义异常解决方案。需要异常类实现FacadeIgnitionContractsProvidesSolutions 接口。它要求您添加一个getSolution 方法。下面是一个可能的实现。

namespace AppExceptions;use Exception;use FacadeIgnitionContractsSolution;use FacadeIgnitionContractsBaseSolution;use FacadeIgnitionContractsProvidesSolution;class CustomException extends Exception implements ProvidesSolution{    public function getSolution(): Solution    {          return BaseSolution::create("You're doing it wrong")            ->setSolutionDescription('You are obviously doing something wrong. Check your code and try again.')            ->setDocumentationLinks([                'Laracasts' => 'https://laracasts.com',                'Use Flare' => 'https://flareapp.io',            ]);    }}

下面是在 Ignition 中抛出异常的样子。

自定义解决方案

运行解决方案

除了仅仅是建议的解决方案,我们也可以运行它们。想象一下,例如,您忘记设置app key。这是用 Ignition 展示错误的样子。

App key 丢失

如果你点击“生成app key”按钮,我们会在后台生成并设置app key。

App key 生成

刷新页面后,应用程序将正常工作(除非它含有其他异常)

您可以通过让异常实现 FacadeIgnitionContractsProvidesSolution 来创建可运行的解决方案,这与不可运行的解决方案非常相似)。getSolution 方法既可以返回可运行的解决方案,也可以返回不可运行的解决方案。

namespace AppExceptions;use Exception;use FacadeIgnitionContractsProvidesSolution;class CustomException extends Exception implements ProvidesSolution{    public function getSolution(): Solution    {          return new MyRunnableSolution();    }}

下面是实现类MyRunnableSolution.示例

namespace AppSolutions;use FacadeIgnitionContractsRunnableSolution;class MyRunnableSolution implements RunnableSolution{    public function getSolutionTitle(): string    {        return 'You are doing it wrong';    }    public function getSolutionDescription(): string    {        return 'You are doing something wrong, but we can fix it for you.';    }    public function getDocumentationLinks(): array    {        return [];    }    public function getSolutionActionDescription(): string    {        return 'To fix this issue, all you need to do is press the button below.';    }    public function getRunButtonText(): string    {        return 'Fix this for me';    }    public function run(array $parameters = [])    {        // Your solution implementation    }    public function getRunParameters(): array    {        return [];    }}

以下是在 Ignition 中 如何抛出自定义异常 CustomException 的样子.

自定义可运行解决方案

当用户点击Fix this for me修复按钮时,run 函数将执行。

您可以将参数从异常发生的请求传递到将运行解决方案的请求。让getRunParameters 返回一个数组。该数组将被传递给 run 。

使 Ignition 更聪明

因此,你有能力使用文本或者可运行的解决方案来增强自己的异常。 但有时需要为内置的 PHP 异常,甚至是你无法控制代码的第三方异常提供友好的解决方案。

我们允许你使用 “Solution Providers” 来处理上面提到的难点。 Solution Providers 是可以通过 Ignition 挂钩到解决方案查找过程的类。 当异常被抛出并且 Ignition 接收到异常时,你可以调用自定义 solution provider 为这个异常返回一个或多个可能的解决方案。

例如,您可以创建一个自定义“堆栈溢出”解决方案提供程序,它将尝试为给定的异常找到匹配的堆栈溢出结果,并将它们作为解决方案返回。

我们也在 Ignition 自身上使用解决方案提供者。下面是这样一个解决方案提供者的样子:

use Throwable;use RuntimeException;use FacadeIgnitionContractsSolution;use FacadeIgnitionSolutionsGenerateAppKeySolution;use FacadeIgnitionContractsHasSolutionForThrowable;class MissingAppKeySolutionProvider implements HasSolutionForThrowable{    public function canSolve(Throwable $throwable): bool    {        if (! $throwable instanceof RuntimeException) {            return false;        }        return $throwable->getMessage() === 'No application encryption key has been specified.';    }    public function getSolutions(Throwable $throwable): array    {        return [            new GenerateAppKeySolution()        ];    }}

这些解决方案提供者可以在Ignition中自动注册,如下所示:

namespace AppProviders;use AppSolutionsGenerateAppKeySolution;use FacadeIgnitionContractsSolutionProviderRepository;use IlluminateSupportServiceProvider;class YourServiceProvider extends ServiceProvider{    /**     * Register services.     *     * [@return](https://learnku.com/users/31554) void     */    public function register(SolutionProviderRepository $solutionProviderRepository)    {        $solutionProviderRepository->registerSolutionProvider(GenerateAppKeySolution::class);    }}

就像这样,方案提供者将继续增强 Ignitions 功能,为您的异常提供解决方案,我们迫不及待地想看看社区将提供什么!

定制 Ignition

Ignition 具有可扩展性。您可以添加新选项卡或替换默认选项卡。

让我们看一下提供的 facade/ignition-tinker-tab。 该包是一个基于 spatie/laravel-web-tinker的包装器,它允许您在浏览器中使用Artisan tinker。

安装了 facade/ignition-tinker-tab,您就可以在错误页面上使用Artisan tinker。

Tinker 选项卡

我们还创建了第二个包, 名为 facade/ignition-code-editor。这个选项卡替换了默认的stack trace选项卡,使用一个自定义选项卡,允许您在错误屏幕上编辑代码。它就在如下操作。

Laravel

想学习如何添加自定义选项卡, 请访问 the documentation on adding tabs.

相关推荐:最新的五个Laravel视频教程

原文地址:https://freek.dev/1441-ignition-a-new-error-page-for-laravel

译文地址:https://learnku.com/laravel/t/33857

以上就是一文介绍Laravel Ignition的一切的详细内容,更多请关注创想鸟其它相关文章!

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

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
母婴APP开发:母婴类APP定制开发方案_功能_市场分析
上一篇 2025年11月8日 12:01:42
如何用浏览器打开php
下一篇 2025年11月8日 12:01:45

相关推荐

  • Laravel中的Blade模板引擎基础用法

    blade模板引擎在laravel中用于简化视图开发。具体使用方法如下:1.输出变量:{{ $variable }}。2.条件判断:@if、@else、@elseif。3.循环:@foreach。4.模板继承:@extends、@section、@yield。blade让视图代码更简洁易读,但需注意…

    2026年9月21日
    000
  • 使用Laravel构建RESTful API:实现现代化的后端开发

    使用Laravel构建RESTful API:实现现代化的后端开发 引言:在现代的Web开发中,构建RESTful API已经成为了一种主流的方式。RESTful API提供了一种灵活、可扩展的方式,用于与前端应用、移动应用或其他第三方服务进行交互。 Laravel是一款优秀的PHP框架,不仅提供了…

    2026年9月21日
    000
  • Laravel中的表单构建和验证:简化用户输入和数据处理

    Laravel中的表单构建和验证:简化用户输入和数据处理 在Web应用程序开发中,表单是用户与应用程序进行交互的重要方式之一。Laravel作为一种流行的PHP框架,提供了许多便捷的工具和功能来简化表单的构建和验证过程。本文将介绍如何使用Laravel来简化用户输入和数据处理过程。 一、表单构建 L…

    2026年9月21日
    000
  • Laravel应用的安全审计(Security Audit)方法

    进行安全审计对laravel应用至关重要,因为它能发现并修复安全漏洞,提升整体安全性和用户信任度。具体方法包括:1. 代码审查,确保无未过滤输入和弱密码;2. 配置文件安全性,保护敏感信息;3. 依赖管理,更新第三方包;4. 用户认证和授权,防止未授权访问;5. 日志和监控,检测异常行为。 在讨论L…

    2026年9月21日
    200
  • Laravel 8 登录后重定向到仪表盘的全面指南

    本文深入探讨了 Laravel 8 中用户登录后重定向到仪表盘的多种策略。我们将详细解析默认的重定向机制,包括 LoginController 和 RedirectIfAuthenticated 中间件,并重点介绍如何通过自定义登录逻辑实现精确的重定向控制,同时提供示例代码和常见问题排查建议,确保用…

    2026年9月21日
    100
  • 如何在Laravel中配置数据库连接?

    在laravel中配置数据库连接需要以下步骤:1. 编辑.env文件,设置db_connection、db_host、db_port、db_database、db_username、db_password。2. 确保config/database.php文件正确引用.env文件中的配置。3. 利用环…

    2026年9月21日
    100
  • Laravel与Vue.js/React前端框架集成

    laravel可以与vue.js或react集成。1) 使用命令“php artisan preset vue”或“php artisan preset react”设置开发环境。2) 在laravel视图中引入编译后的javascript文件。3) 通过laravel的api路由和前端框架的htt…

    2026年9月21日
    100
  • Laravel中的服务容器(Service Container)是什么?

    laravel中的服务容器是框架的核心组件,充当服务定位器和依赖注入容器。1)它管理类及其依赖,简化依赖管理,提升代码可测试性和可维护性。2)服务容器是应用架构的基石,帮助拆分复杂业务逻辑成独立服务,提高代码灵活性和可扩展性。3)基本用法包括绑定和解析服务,如app()->bind(&#821…

    2026年9月21日
    100
  • 如何为VSCode配置一个高效的PHP开发环境?

    搭建高效PHP开发环境需配置VSCode扩展与工具链:①安装PHP Intelephense实现智能补全;②配置Xdebug实现断点调试;③集成PHP CS Fixer或Prettier实现保存时自动格式化;④利用GitLens和集成终端提升协作与操作效率,一次性配置可长期提升编码质量与开发速度。 …

    2026年9月21日
    100
  • Laravel中的CSRF保护机制是什么?

    laravel通过生成和验证唯一的token来实现csrf保护。1)生成token并嵌入表单,2)验证提交的token是否与session中的token匹配,3)可将特定路由排除在csrf保护之外,4)使用@csrf指令生成token,5)中间件自动验证token,确保请求经过csrf验证。 Lar…

    2026年9月20日
    000
  • PHP框架依赖管理工具选哪个_PHP框架依赖管理工具对比

    Composer是PHP依赖管理的首选工具,通过composer.json定义依赖、自动安装包并处理版本冲突,支持主流框架、拥有丰富生态和自动加载机制,尽管存在学习曲线和潜在依赖冲突,但其优势远超其他方案。 PHP框架依赖管理,其实就是选一个靠谱的工具来帮你自动搞定项目里各种代码包的安装、更新和卸载…

    2026年9月20日
    000
  • 如何使用Laravel队列(Queues)提升性能?

    是的,laravel队列可以显著提升应用性能。通过将耗时任务推入队列异步处理,用户可以立即得到响应,从而提高应用的响应速度和稳定性。例如,将邮件发送任务推入队列后,用户下单时无需等待邮件发送即可完成操作,减轻了服务器负载。 使用Laravel队列(Queues)提升性能?这是一个非常好的问题!在我的…

    2026年9月20日
    100
  • Laravel应用的安全头(Security Headers)配置

    在laravel中配置安全头可以通过创建并使用中间件来实现。具体步骤如下:1. 创建一个中间件类,添加所需的安全头,如content-security-policy、x-frame-options等。2. 将中间件添加到app/http/kernel.php中的$middleware数组中,确保所有…

    2026年9月20日
    100
  • Eloquent ORM基础:定义模型和使用

    eloquent orm简化了laravel中的数据库操作。1.定义模型:创建模型类并指定表名和可批量赋值的字段。2.使用模型进行crud操作:如创建新用户。3.利用关系定义处理复杂数据结构。4.注意性能优化,如使用eager loading避免循环查询。5. beware of common pi…

    2026年9月20日
    000
  • 如何在Laravel中配置HTTPS支持

    配置https支持主要分为以下步骤:1.获取ssl证书,可通过购买或使用let’s encrypt免费证书;2.配置服务器(nginx或apache),设置443端口及证书路径;3.强制https重定向,通过服务器配置或laravel中间件实现;4.配置laravel的url生成为htt…

    2026年9月20日
    100
  • 如何在Laravel中配置多语言支持

    在laravel中配置多语言支持的核心步骤包括定义语言包、设置应用语言环境以及使用翻译函数。1. 创建语言文件:在resources/lang目录下为每种语言创建子目录(如en和zh-cn),并在其中定义php数组存储翻译字符串;2. 设置语言环境:通过config/app.php中的’…

    2026年9月20日
    000
  • Laravel中的路由(Routing)是如何工作的?

    laravel中的路由通过将http请求映射到应用中的特定逻辑来工作。1)请求首先经过routes目录下的web.php或api.php文件寻找匹配的路由定义。2)匹配成功后,执行关联的控制器方法或闭包函数。3)高级功能包括命名路由、中间件和路由缓存,这些优化了应用的结构、安全性和性能。 Larav…

    2026年9月20日
    000
  • 如何在Laravel中使用Blade模板

    blade模板引擎是laravel框架的核心组件,用于创建动态视图。它允许在html中嵌入php代码,同时保持代码简洁易读。其使用步骤包括:1. 在resources/views目录下创建以.blade.php为扩展名的模板文件;2. 使用blade指令如@if、@foreach控制逻辑与渲染;3.…

    2026年9月20日
    000
  • 如何在Laravel中实现软删除功能

    软删除是通过添加“已删除”标记而非真正删除数据来保留记录,laravel 提供内置支持。1. 在模型中引入 softdeletes trait 并指定 deleted_at 为日期类型;2. 创建迁移文件使用 softdeletes() 方法添加 deleted_at 字段;3. 调用 delete…

    2026年9月20日
    000
  • 如何在Laravel中定义模型关联关系

    在laravel中定义模型关联关系的核心是通过eloquent orm构建智能数据网络,以面向对象的方式简化数据库操作。1. 一对一关联(hasone/belongsto)用于如用户与电话的关系;2. 一对多关联(hasmany/belongsto)适用于文章与评论的场景;3. 多对多关联(belo…

    2026年9月20日
    000

发表回复

登录后才能评论
关注微信