当前位置: 首页 > 后端技术 > PHP

LaravelIgnition功能全解析

时间:2023-03-30 03:49:08 PHP

文章转发自专业的Laravel开发者社区,原文链接:https://learnku.com/laravel/t...在这篇博文中,我将告诉你关于Ignition的一切。让我们看看默认情况下PHP中有什么。PHP在不使用框架的情况下提供了此功能。您只会收到错误:没有堆栈跟踪,没有请求或应用程序详细信息。Symfony的错误页面稍微好一点,它向您显示堆栈跟踪,但不是很有帮助。下面的屏幕截图是Whoops,这是Laravel5中的标准配置。它比默认的Symfony好得多,显示了堆栈跟踪和一些关于请求的信息。尽管Whoops是Laravel中的默认设置,但它是框架不可知的(错误收集显示)。它只显示一般信息。这是Ignition的屏幕截图,这是我们构建的新错误视图。由于这是Laravel特有的,我们可以做很多很酷的事情。发现Ignition让我们探索Ignition的所有来龙去脉。它是开源的,您可以在此处查看代码(https://github.com/facade/ign...。如果视图中有错误,这就是whoops显示它们的方式。请注意异常消息不适合分配的空间。你必须(鼠标)在它上面才能看到完整的(信息)。在堆栈跟踪中,你可以看到使用了编译的Blade视图和内容。这使得很难跟踪哪个Blade视图文件包含错误,而视图内容本身是不可读的。Ignition是Laravel特有的错误页面。因此,它可以像一个钩子一样,“钩”到框架中,用于显示未编译的视图路径和你的Blade视图。最上面还有有足够的空间来显示整个异常页面而无需额外单击。默认情况下我们也只显示应用程序框架,因为这些可能是您感兴趣的。如果您单击文件名右侧的堆栈跟踪选项卡在铅笔图标旁边,我们将自动在您喜欢的编辑器中打开该文件。作者:de错误是PhpStorm。您可以在点火配置文件中将其配置为您喜欢的编辑器。注意到“望远镜”链接了吗?如果您安装了LaravelTelescope(第一方调试助手),我们只会显示。如果您单击该链接,您将被带到Telescope中发生错误的异常。深色模式如果我们的默认错误屏幕太亮,您会很高兴知道我们的错误页面也有深色模式。Ignition选项卡让我们探索Ignition页面上显示的选项卡。Requests选项卡在StackTrace选项卡旁边,您会看到Requests选项卡。它显示了您期望的请求的所有信息。假设您有这样的路由定义::Route::get('/posts/{post}',function(Post$post){//});当这条路线发生异常时,我们会在IgnitionParameterpostmodel($postvariable)中打印这条路线,以转换数组(toArray)的形式呈现。对于不需要任何绑定的“简单”路由参数也是如此。这是一种轻松查看Laravel正在为这条特定路线接收哪些信息的好方法。在路由参数之后,我们还将向您展示此请求中使用的中间件列表。接下来是“视图”部分。如果异常发生在视图中,我们将在此处显示视图名称。甚至:我们还会给出传递给视图的所有数据的列表。用户选项卡“用户”选项卡包含有关使用该应用程序的用户和浏览器的更多信息。上下文选项卡在上下文选项卡中,我们显示有关您的存储库(存储库所在的位置、签出提交哈希)和环境(您使用的是哪个版本的PHP和Laravel)的信息。调试选项卡在调试选项卡中,我们将显示异常发生之前发生的情况。如查询、日志和转储。在转储旁边,我们还显示了放置转储语句的文件名。单击铅笔图标,您可以直接转到文件并在您喜欢的编辑器中更正行号。建议的解决方案让我们看看另一个错误。这次我们将忘记导入类。点火错误页面是这样的。因此,Ignition会发现有关未找到类的异常。它将尝试找出这个类是否存在于其他名称空间中。如果存在,它会建议我们导入它。Ignition附带了一些常见问题的解决方案。如果未找到Blade视图,则使用无效视图,如下所示。您还可以自定义异常解决方案。需要异常类来实现Facade\IgnitionContracts\ProvidesSolutions接口。它要求您添加一个getSolution方法。下面是一个可能的实现。namespaceApp\Exceptions;useException;useFacade\IgnitionContracts\Solution;useFacade\IgnitionContracts\BaseSolution;useFacade\IgnitionContracts\ProvidesSolution;classCustomExceptionextendsExceptionimplementsProvidesSolution{publicfunctiongetSolution():Solution{"你在做wrong")->setSolutionDescription('你显然做错了什么。检查你的代码并重试。')->setDocumentationLinks(['Laracasts'=>'https://laracasts.com','UseFlare'=>'https://flareapp.io',]);这是在Ignition中抛出异常的样子。运行解决方案除了建议的解决方案,我们还可以运行它们。想象一下,例如,您忘记设置应用程序密钥。这就是Ignition显示错误的样子。如果您点击“生成应用密钥”按钮,我们将在后台生成并设置应用密钥。刷新页面后,应用程序将正常工作(除非它包含其他异常(您可以通过让异常实现Facade\IgnitionContracts\ProvidesSolution来创建可运行的解决方案,这与不可运行的解决方案非常相似)。getSolution方法可以返回一个可运行或不可运行的解决方案。命名空间App\Exceptions;使用Exception;使用Facade\IgnitionContracts\ProvidesSolution;classCustomExceptionextendsExceptionimplementsProvidesSolution{publicfunctiongetSolution():Solution{returnnewMyRunnableSolution();}}下面是实际类MyRunnableSolution。示例命名空间App\Solutions;useFacade\IgnitionContracts\RunnableSolution;classMyRunnableSolutionimplementsRunnableSolution{publicfunctiongetSolutionTitle():string{return'Youaredoingitwrong';}publicfunctiongetSolutionDescription():string{return'你做错了什么,但我们可以为你解决。';}publicfunctiongetDocumentationLinks():array{return[];}publicfunctiongetSolutionActionDescription():string{return'要解决这个问题,您需要做的就是按下下面的按钮。';}publicfunctiongetRunButtonText():string{return'帮我解决这个问题';}民众functionrun(array$parameters=[]){//你的解决方案实现}publicfunctiongetRunParameters():array{return[];}}下面是如何在Ignition中抛出自定义异常CustomException。当用户单击Fixthisformefixes按钮时,将执行运行函数,您可以将参数从发生异常的请求传递到将运行解决方案的请求。让getRunParameters返回一个数组。该数组将传递给run。使Ignition更智能因此您可以使用文本或可运行的解决方案来增强异常。但有时您需要为内置的PHP异常,甚至是您无法控制代码的第三方异常提供友好的解决方案。我们允许您使用“解决方案提供商”来解决上述痛点。解决方案提供者是可以通过Ignition连接到解决方案查找过程中的类。当Ignition抛出并接收到异常时,您可以调用自定义解决方案提供程序,该提供程序会为异常返回一个或多个可能的解决方案。例如,您可以创建一个自定义的“stackoverflow”解决方案提供程序,它将尝试为给定的异常找到匹配的stackoverflow结果并将它们作为解决方案返回。我们还在Ignition本身上使用解决方案提供商。这样的解决方案提供者是这样的:使用Throwable;使用运行时异常;使用Facade\IgnitionContracts\Solution;使用Facade\Ignition\Solutions\GenerateAppKeySolution;使用Facade\IgnitionContracts\HasSolutionForThrowable;类MissingAppKeySolutionProvider实现HasSolutionForThrowable{publicfunctioncanThrowable$throwable):bool{if(!$throwableinstanceofRuntimeException){returnfalse;}return$throwable->getMessage()==='Noapplicationencryptionkeyhasbeenspecified.';}publicfunctiongetSolutions(Throwable$throwable):array{return[newGenerateAppKeySolution()];这些解决方案提供者可以在Ignition中自动注册,如下所示:服务。**[@return](https://learnku.com/users/31554)void*/publicfunctionregister(SolutionProviderRepository$solutionProviderRepository){$solutionProviderRepository->registerSolutionProvider(GenerateAppKeySolution::class);}}正是如此,解决方案提供者将继续增强Ignitions功能,为您的异常提供解决方案,我们迫不及待地想看看社区能提供什么!CustomIgnitionIgnition是可扩展的您可以添加新选项卡或替换默认选项卡。我们来看看提供的门面/ignition-tinker-tab。这个包是spatie/laravel-web-tinker的包装器,它允许你在浏览器中使用Artisantinker。安装facade/ignition-tinker-tab后,您可以在错误页面上使用Artisan修补程序。我们还创建了第二个包,称为facade/ignition-code-editor。此选项卡将默认堆栈跟踪选项卡替换为允许您在错误屏幕上编辑代码的自定义选项卡。它的操作如下。要了解如何添加自定义选项卡,请访问有关添加选项卡的文档。