简介
Laravel Prompts 是一个为命令行应用添加美观易用交互式表单的 PHP 扩展包。 它提供了接近浏览器表单体验的占位符文本、校验等能力。 由于可以在 Artisan 命令代码中直接调用,因此写出的与用户交互的代码既简洁又直观。Laravel Prompts 支持 macOS、Linux 与 Windows(WSL)。
在不支持的环境中会自动降级到备用行为。
安装
Laravel Prompts 已随 Laravel 本体一起分发,无需单独安装。 若在其他 PHP 项目中使用,通过 Composer 安装即可。基础 Prompt 函数
text — 文本输入
text() 用来让用户输入一个字符串。
required 可将输入设为必填,并自定义错误提示。
validate 闭包用来做额外校验。返回错误消息即校验失败,返回 null 表示通过。
textarea — 多行文本输入
textarea() 接受多行输入。
number — 数字输入
number() 用于接收数字,可通过上下方向键调整数值。
password — 密码输入
password() 用法与文本输入相同,但输入内容不会显示在屏幕上。
confirm — 是/否确认
confirm() 让用户在两个选项中做出选择,返回 true 或 false。
select — 单选列表
select() 让用户从列表中选一个。
scroll 用来指定滚动前显示的选项数量(默认 5)。
multiselect — 多选
multiselect() 让用户同时选择多个选项。
required 可要求至少选择一个。
suggest — 带自动补全的输入
suggest() 会给出提示同时允许自由输入。
search — 动态检索
search() 会在用户每次输入时刷新候选列表。闭包返回的数组即为候选。
multisearch — 动态多选
multisearch() 允许在动态搜索的基础上进行多选。
pause — 暂停
pause() 用来让用户按下 Enter 键,暂停执行。
autocomplete — 内联补全
autocomplete() 会以 ghost text(灰色影子文本)形式展示候选。与 suggest() 不同的是,它在用户每次输入时以 ghost text 显示匹配项,通过 Tab 或右方向键确认补全。
校验
所有 Prompt 函数都可以通过validate 参数进行校验。
null 则表示校验通过。
也可以以数组形式使用 Laravel 校验规则。
transform 参数。
表单
form() 可以把多个 Prompt 打包成一个表单,用户可以在完成之前统一取消。
信息输出
以下函数用于输出带样式的信息。Callout(提示框)
callout() 会用边框把标签和内容框起来。适合突出显示部署总结、错误详情、状态更新等重要信息。
type 参数中传入 'warning' 或 'error' 可以改变视觉样式。
info 参数可以添加尾行。方便展示 ID、时间戳等元数据。
富内容
以数组代替字符串时,可以构造结构化的富内容 callout。Element 类提供了创建标题、无序列表、有序列表、键值列表和链接的工厂方法。
Element::keyValueList 可以展示带标签的数据。
Element::link 可以生成可点击的超链接。可以只传 URL,也可以传 URL 和自定义标签。
表格显示
table() 用于以表格形式展示数据。
Spin(加载中动画)
spin() 会在闭包执行期间显示加载指示器。
进度条
progress() 可视化地展示循环处理进度。
任务(Task)
task() 会在回调执行期间显示 spinner 和可滚动的实时输出区。非常适合包装依赖安装、部署脚本等长时间任务,可实时了解发生了什么。
Logger 实例,你可以实时输出日志或状态。
输出日志行
line 方法逐行写入可滚动输出区。
状态消息
success、warning、error 可以在滚动区上方展示带高亮的固定消息。
更新标签
label 方法可以在运行期间更新任务标签。subLabel 方法用来设置显示在标签下方的浅色副标签,传空字符串可清除副标签。也可以通过 subLabel 参数指定初始副标签。
流式输出文本
对于类似 AI 逐步生成响应的场景,可以用partial 方法一段段流式输出。全部完成后调用 commitPartial 提交。
输出上限与保留总结
默认最多显示 10 行滚动输出,可以通过limit 参数自定义。想在任务结束后仍保留状态消息,请传 keepSummary: true。
Stream(流式输出)
stream() 可以将文本逐步展示到终端。非常适合展示 AI 生成的内容或分块到达的数据。
append 方法以淡入效果向流中追加文本。全部内容 stream 完毕后调用 close 完成输出并恢复光标。
终端操作
设置终端标题
清屏
终端注意事项
终端宽度:当标签、选项或校验消息超过终端列宽时会自动截断。若面向 80 列终端,建议控制在 74 个字符以内。 终端高度:对支持scroll 参数的 Prompt,会自动计算以留出校验消息的空间,确保能装进终端高度。
降级(Fallback)
在不支持的环境(如非 WSL 的 Windows)中会自动降级。 默认情况下会调用 Laravel 内置的$this->ask()、$this->choice() 等方法。
测试
Laravel Prompts 可以与 Pest 或 PHPUnit 结合使用。相关页面
Artisan 控制台
在 Artisan 命令中使用 Prompts