
在 Laravel Nova 中,我们通常使用 Action::message() 或 Action::danger() 等方法来向用户显示操作执行结果的即时反馈。例如:
return Action::message('操作成功完成!');
return Action::danger('操作过程中发生错误!');这些消息以“Toast”的形式在屏幕上短暂显示几秒钟后便会自动消失。对于快速完成的操作,这种机制是高效且用户友好的。然而,当处理耗时较长的后台任务(例如,数据导入、报表生成,可能需要数分钟甚至更长时间)时,这种短暂的消息机制就显得力不从心。用户可能会在操作执行期间导航到其他页面或标签页,从而错过任务完成时的关键通知。在这种情况下,一个持久化且可供用户随时查看的通知机制变得尤为重要。
为了解决上述问题,Laravel Nova 4 引入了一个强大的内置通知系统,它允许开发者向用户发送更持久、更具交互性的通知。这些通知会显示在 Nova 后台界面的通知中心,用户可以随时查看,并且可以包含操作按钮、图标和不同的通知类型。
通过使用 Laravel\Nova\Notifications\NovaNotification 类,我们可以构建一个功能丰富的通知,完美适用于长时操作的场景。
以下是使用 Laravel Nova 4 内置通知功能发送持久化通知的示例代码:
<?php
namespace App\Nova\Actions;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Fields\ActionFields;
use Laravel\Nova\Notifications\NovaNotification;
use Illuminate\Support\Facades\Log;
class GenerateReport extends Action implements ShouldQueue
{
use InteractsWithQueue, Queueable;
/**
* 执行操作。
*
* @param \Laravel\Nova\Fields\ActionFields $fields
* @param \Illuminate\Support\Collection $models
* @return mixed
*/
public function handle(ActionFields $fields, \Illuminate\Support\Collection $models)
{
// 模拟一个耗时操作,例如生成报表
Log::info('开始生成报表...');
sleep(300); // 模拟5分钟的执行时间
Log::info('报表生成完成。');
// 假设报表生成后有一个可下载的URL
$reportUrl = 'https://example.com/reports/generated_report_' . uniqid() . '.pdf';
// 向当前用户发送 Nova 通知
$fields->request->user()->notify(
NovaNotification::make()
->message('您的报表已准备就绪,请点击下载。')
->action('下载报表', $reportUrl) // 添加一个下载按钮
->icon('download') // 添加一个下载图标
->type('success') // 设置通知类型为成功
);
return Action::message('报表生成请求已提交,请留意通知中心。');
}
/**
* 获取操作的字段。
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(\Laravel\Nova\Http\Requests\NovaRequest $request)
{
return [];
}
}在上述代码中,我们首先模拟了一个耗时 5 分钟的报表生成过程。一旦任务完成,我们不再使用 Action::message() 来通知用户,而是通过 NovaNotification::make() 构建一个通知对象,并将其发送给当前操作的用户。
NovaNotification::make() 方法提供了多个链式调用方法来定制通知:
通过这些方法,我们可以创建出高度定制化且用户友好的通知。
Laravel Nova 4 的内置通知系统为处理长时操作提供了优雅而强大的解决方案。通过从短暂的 Toast 消息转向持久化、可交互的通知,我们极大地提升了用户体验,确保用户即使在操作过程中离开界面,也能及时获取到关键任务的完成状态和相关信息。合理利用 NovaNotification 及其丰富的定制选项,是构建健壮且用户友好的 Nova 后台管理系统的关键一步。
以上就是Laravel Nova 4 长时操作通知最佳实践:使用内置通知系统的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号