laravel通过封装symfony console组件,提供进度条和表格输出功能。使用$this->withProgressBar()或createProgressBar()可显示处理进度,结合$this->table()方法能以ASCII表格展示数据,先输出待处理用户表格,再用进度条实时反馈执行情况,最后提示完成,提升CLI脚本交互性与可读性。

Laravel 在 CLI 脚本中提供了强大的输出组件,可以轻松实现进度条和表格的显示。这些功能基于 Symfony Console 组件,Laravel 进行了封装,使用起来非常方便。
显示进度条
Laravel 的命令类中可以通过 $this->output 或辅助方法来创建进度条。使用 $this->withProgressBar() 或直接调用 progress bar 实例。
示例:在自定义命令中显示处理进度
$users = User::all();
$bar = $this->output->createProgressBar(count($users));
$bar->start();
foreach ($users as $user) {
$user->update([‘status’ => ‘processed’]);
sleep(1); // 模拟处理时间
$bar->advance();
}
$bar->finish();
$this->info(”); // 换行输出完成信息
也可以使用更简洁的方式:
$this->withProgressBar($users, function ($user) {
$user->update([‘status’ => ‘processed’]);
sleep(1);
});
执行完成后,可添加完成提示:
$this->info(‘处理完成!’);
显示表格数据
Laravel 支持将数组数据以表格形式输出到命令行,适用于展示查询结果或统计数据。
使用 $this->table() 方法即可快速生成表格。
$headers = [‘ID’, ‘姓名’, ‘邮箱‘, ‘状态’];
$users = User::select(‘id’, ‘name’, ’email’, ‘status’)->take(5)->get()->toArray();
$this->table($headers, $users);
输出效果为整齐对齐的 ASCII 表格,适合查看结构化数据。
结合使用:边处理边显示表格摘要
有时需要先展示待处理数据,再显示进度。可以先输出表格,再运行进度条。
// 先显示将要处理的用户
$this->info(‘即将处理以下用户:’);
$this->table(
[‘ID’, ‘姓名’, ‘邮箱’],
User::select(‘id’, ‘name’, ’email’)->whereIn(‘status’, [‘pending’])->get()->toArray()
);
// 开始处理并显示进度
$pendingUsers = User::where(‘status’, ‘pending’)->get();
$this->withProgressBar($pendingUsers, function ($user) {
$user->update([‘status’ => ‘done’]);
sleep(1);
});
$this->info(‘全部完成!’);
基本上就这些。利用 Laravel 提供的 CLI 输出工具,可以让命令行脚本更直观、更友好。进度条和表格不仅提升体验,也便于调试和监控任务执行情况。