Laravel 的 Ray 桌面调试

发布日期 作者

Ray desktop debugging for Laravel image

Ray 是一款适用于 MacOS、Windows 和 Linux 的美观、轻量级桌面应用程序,可帮助您更快地调试 Laravel 应用程序。 与将 dump 语句发送到浏览器不同,您可以将它们发送到 Ray,在那里我们可以以美观的方式显示它们。

在这个简短的演示中,您可以看到它在行动。

您现在可以下载 免费演示版! 在撰写本文时,您可以以 30% 的折扣购买完整许可证。

使用 Ray

要开始在 Laravel 中使用 Ray,您只需安装这个小包。

composer require spatie/laravel-ray

之后,您可以将任何您想发送到 Ray 的内容发送到 Ray。 这是一个例子。

这是一个例子

ray('my first debug statement');

这是它在 Ray 中的样子

您会看到,在发送到 Ray 的字符串下方,您会看到一个链接,指向执行 ray 语句的位置。 点击该链接将带您到 IDE 中的该位置(我们支持 PhpStorm、VScode、Sublime 和许多其他 IDE…)。

ray 函数接受所有内容:字符串、数组、对象……您也可以传递任意数量的参数。

ray('a string', ['a' => 1, 'b' => 2 , 'c' => 3], app());

大型数组和大型对象数组的片段可以折叠,就像您习惯的那样。 在这张截图中,我折叠了 Illuminate\Foundation\Application 的大型实例。

当您调试中等规模的问题时,您过去可能使用过多个 dump 语句。 其中一些语句可能比其他语句更重要。 在过去,我通过用大写字母编写 dump 语句或添加一些额外的字符来区分更重要和不太重要的语句,这样它就能在输出日志中吸引我的眼球。 就像这样

dump('I AM HERE');
dump('-------- I AM HERE --------');

与其使用大写字母或其他技巧来突出显示调试信息,不如将您发送到 Ray 的语句着色。

ray('this is green')->green();
ray('this is orange')->orange();
ray('this is red')->red();
ray('this is blue')->blue();
ray('this is purple')->purple();
ray('this is gray')->gray();

看到 UI 顶部的那些小彩色点了吗? 您可以使用它们来过滤掉具有该颜色的项目。 以下是激活蓝色过滤器后的样子

您是否认为 Ray 对您的眼睛来说太亮了? 您会很高兴知道现在也有一个深色主题。 这就是它看起来的样子。

快速衡量性能

您可能想知道某段代码运行需要多长时间以及它占用了多少内存。 您可以通过调用 ray()->measure() 来轻松衡量性能。 第一次调用它时,Ray 将开始测量性能。 第二次调用 measure() 时,它将显示第二次调用和第一次调用之间的时间量。

这是一个例子

ray()->measure();
 
sleep(1);
 
ray()->measure();
 
sleep(2);
 
ray()->measure();

这是它在 Ray 中的样子

暂停代码执行

此功能有点令人难以置信:Ray 可以暂停您的代码。 当您想查看代码的副作用(写入数据库的内容、执行的 API 调用)然后再继续时,这将非常有用。

在这个例子中,我们将循环遍历每个用户,以某种方式更改该用户,并暂停代码。

User::each(function(User $user) {
$user->performSomeSortOfUpdateOrSideEffect();
 
ray("Executed loop for user {$user->id}")->pause();
})

在您检查数据库确认一切正常后,您可以按 Ray 中的“继续”按钮来执行下一个用户的代码。 如果您想停止执行,请按“停止”按钮,让您的应用程序抛出异常。

查看函数在哪里被调用

有时您想知道您的代码在哪里被调用。 您可以通过使用 caller 函数来快速确定这一点。

ray()->caller();

如果要查看整个回溯,请使用 trace 方法

ray()->trace();

显示模型

如果dump Eloquent 模型,您会看到该模型的许多内部结构,而这些内部结构您大部分都不需要。

在大多数情况下,您想查看属性和/或加载的关系。 调用 model() 可以做到这一点。

ray()->model($user);

显示所有查询

您可以通过调用 ray()->showQueries(); 将代码执行的所有查询发送到 Ray。

ray()->showQueries();
 
User::whereFirst('email', '[email protected]');

在 Ray 中,我们将显示已执行的查询,并内联所有参数。 您还会看到执行查询所需的时间。 Ray 甚至会向您显示查询执行的位置。 您可以点击该链接跳转到查询的来源。

如果在代码中的某个特定点之后,您不想再发送任何查询,则可以调用 ray()->stopShowingQueries()

或者,您可以将闭包传递给 showQueries,以仅显示在给定可调用对象中执行的查询。

ray()->showQueries(function() {
// some code that executes queries
});

显示日志项(和可邮件项!)

默认情况下,发送到日志中的任何内容都将在 Ray 中显示。

// these are automatically sent to Ray
Log::info('using the facade to log something');
info('using the helper function to log something');

在一个新的 Laravel 应用程序中,您发送的任何邮件都将写入日志文件(因为日志驱动程序是默认的邮件驱动程序)。 这里有一个很酷的功能:每当 Ray 检测到邮件被写入日志时,它将显示该可邮件项。

// sending any mail when the log mailer is active,
// will render that mail-in Ray.
 
Mail::to('[email protected]')->send(new MyMailable());

这就是它的样子

显示集合

在 Laravel 应用程序中,Ray 将自动注册一个 ray 集合宏,以便轻松地将集合发送到 Ray。

collect(['a', 'b', 'c'])
->ray('original collection') // displays the original collection
->map(fn(string $letter) => strtoupper($letter))
->ray('uppercased collection') // displays the modified collection

在 Blade 视图中使用 Ray

您可以使用 @ray 指令从 Blade 视图内部轻松地将变量发送到 Ray。 您可以传递任意数量的内容。

{{-- inside a view --}}
 
@ray($variable, $anotherVariables)

显示事件

您可以通过调用 showEvents 来显示执行的所有事件。

ray()->showEvents();
 
event(new TestEvent());
 
event(new TestEventWithParameter('my argument'));

要停止显示事件,请调用 stopShowingEvents

ray()->showEvents();
 
event(new MyEvent()); // this event will be displayed
 
ray()->stopShowingEvents();
 
event(new MyOtherEvent()); // this event won't be displayed.

或者,您可以将可调用对象传递给 showEvents。 只有在该可调用对象内部触发的事件才会在 Ray 中显示。

event(new MyEvent()); // this event won't be displayed.
 
ray()->showEvents(function() {
event(new MyEvent()); // this event will be displayed.
});
 
event(new MyEvent()); // this event won't be displayed.

总结

Ray 的演示版 允许您在每个会话中将十个项目发送到 Ray。 要在每个会话中发送更多内容,您可以 购买许可证。 在撰写本文时,我们正在进行一项很棒的促销活动,让您可以省下一些钱。

Eric L. Barnes photo

Eric 是 Laravel 新闻的创始人,自 2012 年以来一直在报道 Laravel。

归档于
Cube

Laravel 新闻稿

加入 40,000 多名其他开发者,绝不错过任何新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全和本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

绝不妥协

Joel 和 Aaron,来自“绝不妥协”播客的两名经验丰富的开发者,现在可以为您的 Laravel 项目聘用。 ⬧ 固定费用 7500 美元/月。 ⬧ 无冗长的销售流程。 ⬧ 无合同。 ⬧ 100% 退款保证。

绝不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序成功。

Kirschbaum
Shift logo

Shift

正在运行旧版 Laravel?立即进行自动化的 Laravel 升级和代码现代化,使您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

只需 2500 美元/月,即可使用拥有 4-6 年经验的经验丰富的 Laravel 开发人员为您的项目注入活力。获得 160 小时的专业知识和 15 天的无风险试用。立即安排通话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - 拥有十多年经验的 Laravel 开发的理想选择!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源软件包,将现代无头电子商务功能的功能带入 Laravel。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 职位板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,它包含运行现代 SaaS 所需的所有功能。支付、漂亮的结账、管理面板、用户仪表板、身份验证、现成组件、统计信息、博客、文档等等。

SaaSykit: Laravel SaaS 启动套件
Rector logo

Rector

您无缝 Laravel 升级、降低成本和加速创新的合作伙伴,为成功企业服务

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖性输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的准确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel 提示构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速模糊网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 软件包将评论添加到您的 Laravel 应用程序

阅读文章