
在Laravel Nova中,开发者通常使用 Action::message() 或 Action::danger() 等方法来向用户提供动作执行结果的即时反馈。这些消息以Toast的形式短暂显示在屏幕上,对于快速完成的操作而言,这种反馈机制简洁高效。然而,当面临需要数分钟甚至更长时间才能完成的后台任务时,例如生成复杂的报告或处理大量数据,这种短暂的Toast消息便显得力不从心。用户可能在任务执行期间切换页面或标签页,导致他们错过重要的成功或失败通知,从而影响用户体验和工作流程的连贯性。
为了解决这一问题,Laravel Nova 4引入了功能更为强大的通知系统,即 NovaNotification。与短暂的Toast消息不同,NovaNotification 提供了持久化的通知机制,并且支持添加交互式按钮和自定义图标,极大地提升了用户接收和处理信息的能力。
NovaNotification 允许我们将通知直接发送给特定的用户,这些通知会显示在Nova界面的通知中心,并且可以持续存在,直到用户主动处理或清除它们。这对于需要长时间等待结果的异步操作尤为关键。
以下是如何在您的Nova动作中利用 NovaNotification 发送持久化通知的示例。此示例假设您的动作本身是耗时操作,并且已经实现了 ShouldQueue 接口以在后台执行:
use Laravel\Nova\Notifications\NovaNotification;
use Laravel\Nova\Actions\Action;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Collection;
use Laravel\Nova\Fields\ActionFields;
use Illuminate\Http\Request; // 引入 Request 类
class GenerateLongReport 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, Collection $models)
{
// 模拟一个耗时5-8分钟的报告生成过程
// 在实际应用中,这部分逻辑会执行您的业务代码
sleep(300); // 模拟5分钟的执行时间
// 假设报告已成功生成,并提供下载链接
$reportUrl = 'https://example.com/reports/generated_report_' . uniqid() . '.pdf';
// 获取当前请求的用户实例
$request = app(Request::class); // 在队列化动作中获取请求对象可能需要特殊处理,这里简化示例
$user = $request->user();
if ($user) {
// 通过NovaNotification发送持久化通知给当前用户
$user->notify(
NovaNotification::make()
->message('您的报告已准备好下载。') // 通知消息内容
->action('下载报告', $reportUrl) // 添加一个可点击的动作按钮
->icon('download') // 设置通知图标,例如下载图标
->type('info') // 设置通知类型,如 'info', 'success', 'warning', 'danger'
);
}
// 返回一个简单的Action::message(),告知用户任务已完成并引导他们查看通知中心。
// 这个Toast消息可以短暂显示,但核心结果通过持久通知传达。
return Action::message('报告生成任务已完成,请查看通知中心获取下载链接。');
}
}在上述代码中:
使用 NovaNotification 相比传统的 Action::message() 具有显著优势:
通过采纳Laravel Nova 4的 NovaNotification 功能,开发者可以显著提升处理耗时动作时的用户体验。它提供了一种持久、可交互且高度可定制的通知机制,确保用户即使在复杂的后台操作流程中也能保持信息同步,并能够方便地进行后续操作。将 NovaNotification 融入您的Nova动作设计中,将使您的管理界面更加健壮和用户友好,真正告别短暂Toast带来的信息遗漏困扰。
以上就是Laravel Nova 4 动作响应持久化:告别短暂Toast,拥抱长效通知的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号