
在 laravel nova 中,我们经常利用 action::message() 或 action::danger() 等方法在动作执行后向用户显示反馈信息。这些消息通常以“toast”的形式在屏幕上短暂显示几秒钟后自动消失。对于快速完成的动作,这种即时反馈是高效且友好的。然而,当面临执行时间较长(例如,5-8分钟)的后台任务时,这种短暂的消息机制便暴露出其局限性:
为了解决上述问题,Laravel Nova 4 引入了强大的 NovaNotification 功能。它允许开发者发送持久化的、带有图标和可点击动作按钮的通知,这些通知会显示在 Nova 应用的用户界面中,直到用户手动关闭或执行了相关操作。这使得长时任务的完成状态能够被清晰、持久地传达给用户。
使用 NovaNotification 发送通知的步骤如下:
首先,你需要创建一个 NovaNotification 实例。这通常在你的 Nova Action 的 handle 方法中完成,或者在任何你需要发送通知的地方。
use Laravel\Nova\Notifications\NovaNotification;
use Illuminate\Http\Request;
// ... 在你的 Nova Action 的 handle 方法或其他服务中
public function handle(ActionFields $fields, Collection $models)
{
// 假设你正在处理一个模型或请求
$request = app(Request::class); // 获取当前请求实例
// 构建通知
$notification = NovaNotification::make()
->message('您的报告已准备就绪,可以下载。') // 设置通知的主要文本内容
->action('下载报告', 'https://example.com/report.pdf') // 添加一个可点击的动作按钮
->icon('download') // 设置通知的图标,例如 'download', 'check', 'exclamation' 等
->type('info'); // 设置通知的类型,可选 'info', 'success', 'warning', 'danger'
// 发送通知
$request->user()->notify($notification);
return Action::message('报告生成任务已完成,请查看通知中心。');
}通知是通过 Laravel 的 Notifiable trait 发送的。通常,你的 User 模型应该已经使用了此 trait。你可以通过当前请求获取认证用户,然后调用其 notify() 方法。
$request->user()->notify($notification);
注意事项:
尽管 Laravel Nova 提供的 Action::message() 等 Toast 消息对于即时反馈非常方便,但它们在处理长时任务或需要用户后续交互的场景下显得力不从心。通过拥抱 Laravel Nova 4 的 NovaNotification 功能,开发者能够构建出更健壮、用户体验更佳的通知系统。它不仅能确保重要信息不会被遗漏,还能通过交互式按钮引导用户完成下一步操作,从而显著提升 Nova 应用的专业性和易用性。在设计你的 Nova Action 响应时,请根据任务的性质和重要性,明智地选择 Toast 消息还是 NovaNotification。
以上就是优化 Laravel Nova 动作响应消息的持久性与用户体验的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号