
在 laravel nova 中,我们通常通过 action::message() 或 action::danger() 方法来向用户显示操作结果的即时反馈。这些方法会生成短暂的 toast 提示,在屏幕上停留数秒后自动消失,例如:
// 显示成功消息
return Action::message('操作成功完成!');
// 显示错误或危险消息
return Action::danger('操作过程中发生错误!');这种即时提示对于快速完成的操作非常有效。然而,当一个 Nova 动作需要较长时间(例如,5-8分钟)才能执行完毕时,这种瞬时提示就显得力不从心。用户可能在操作执行期间切换到其他标签页或进行其他工作,当他们返回时,原有的 toast 提示早已消失,无法得知操作是否完成或结果如何,这极大地降低了用户体验。对于这类长时间运行的任务,我们需要一种更为持久且用户友好的反馈机制。
为了解决上述问题,Laravel Nova 4 引入了强大的通知(Notifications)功能,它允许开发者向用户发送持久化且可交互的通知,这些通知会保留在 Nova 界面中,直到用户明确处理。这为长时间运行的动作提供了理想的解决方案。
Nova 通知不仅可以显示消息,还可以包含:
以下是如何在 Laravel Nova 动作中利用 Nova 4 通知功能发送持久化通知的示例代码:
<?php
namespace App\Nova\Actions;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Collection;
use Laravel\Nova\Actions\Action;
use Laravel\Nova\Fields\ActionFields;
use Laravel\Nova\Notifications\NovaNotification; // 引入 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, Collection $models)
{
// 假设这是一个耗时较长的操作,例如生成报告
Log::info('开始生成报告...');
// 模拟长时间运行
sleep(300); // 暂停 5 分钟
// 获取当前请求的用户,用于发送通知
$user = request()->user();
// 检查用户是否存在且可通知
if ($user && method_exists($user, 'notify')) {
$user->notify(
NovaNotification::make()
->message('您的报告已准备就绪,可以下载。') // 通知消息
->action('下载报告', 'https://example.com/report.pdf') // 添加一个下载按钮
->icon('download') // 添加下载图标
->type('info') // 设置通知类型为信息
);
return Action::message('报告生成请求已提交,请留意通知。');
} else {
// 如果无法发送通知,则回退到传统消息
return Action::message('报告已生成。');
}
}
/**
* 定义动作的字段。
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function fields(\Laravel\Nova\Http\Requests\NovaRequest $request)
{
return [];
}
}代码解析:
使用 Nova 4 通知相对于传统的 Action::message() 提示具有显著优势:
通过利用 Laravel Nova 4 提供的通知功能,我们可以有效解决默认动作响应消息持续时间短的痛点,尤其对于耗时较长的后台操作。持久化、可交互的通知机制不仅能确保用户及时获取操作结果,还能通过动作按钮引导用户进行下一步操作,从而显著提升 Nova 应用的用户体验和工作效率。在设计 Nova 动作的用户反馈时,应优先考虑使用 NovaNotification 来处理需要更长时间可见性或更复杂交互的场景。
以上就是优化 Laravel Nova 动作响应消息的持久性与交互性的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号