讲师中心 微信公众号
AI工具推荐 视频效率加速

Laravel Prompts如何构建优雅的命令行交互? (表单与选择)

酷芳酱_3936

酷芳酱_3936

发布时间:2026-01-14 13:20:39

|

486人浏览过

|

来源于php中文网

原创

Laravel Prompts 通过语义化函数(如 text()、password()、select()、confirm()、search())封装终端控制逻辑,实现专业 CLI 交互;text() 支持验证回调返回错误字符串,password() 隐藏输入且无 default;select() 和 multiselect() 依赖稳定 value 标识符;confirm() 返回布尔值用于流程分支,search() 基于 str_contains() 客户端过滤,需预载完整选项列表。

laravel prompts如何构建优雅的命令行交互? (表单与选择)

用 Laravel Prompts 构建命令行表单与选择交互,核心在于:它不是「模拟 GUI」,而是通过语义化函数封装底层终端控制逻辑,让你专注数据流而非光标位置。直接上手即可产出专业级 CLI 体验,无需手动处理 ANSI 转义或按键监听。

如何用 text() 和 password() 实现带验证的表单输入

这两个函数本质是阻塞式读取,但关键区别在于 password() 会隐藏输入字符(用 * 替代),且默认不支持退格以外的编辑操作。实际使用中容易忽略校验时机和错误反馈方式:

  • text() 的 validate 回调在每次回车后触发,返回 string 表示通过,返回 string(非空)表示错误提示
  • 不要在 validate 中抛异常——它会中断整个命令流程;应返回错误消息字符串
  • password() 不支持 default 值(安全限制),若需预设值,请改用 text() + 手动掩码逻辑
use Laravel\Octane\Facades\Octane;
use Laravel\Prompts\Prompt;

$name = text(
    label: 'Your name',
    validate: fn (string $value) => match(true) {
        strlen($value) < 2 => 'Name must be at least 2 characters.',
        !ctype_alpha(str_replace(' ', '', $value)) => 'Name may only contain letters and spaces.',
        default => null
    }
);

$pwd = password(
    label: 'Password',
    validate: fn (string $value) => strlen($value) < 8 ? 'Too short.' : null
);

用 select() 和 multiselect() 处理选项逻辑时的常见陷阱

这两个函数返回的是选项的「值」(value),不是标签(label)。如果你传入的是关联数组,键是 value,值是 label,那返回的就是键;如果传入索引数组,则返回对应元素本身。这点极易混淆:

FreeCAD
FreeCAD

使用参数化 JSON 操作在 FreeCAD 中创建或修改三维 CAD 模型。

下载
  • 避免用数字索引数组直接传给 select(),否则用户选中「第二项」,你拿到的是 1 还是 item2?语义不清
  • multiselect() 返回数组,但空选择时返回空数组 [],不是 null;判断是否选中要用 count($choices) > 0
  • 当选项动态生成(如从数据库查出),确保 value 是稳定标识符(如 ID),而非易变字段(如名称)
$env = select(
    label: 'Environment',
    options: [
        'local' => 'Local (for development)',
        'staging' => 'Staging (pre-production)',
        'production' => 'Production (live)',
    ],
    default: 'local'
);

$roles = multiselect(
    label: 'Assign roles',
    options: [
        'admin' => 'Administrator',
        'editor' => 'Content Editor',
        'viewer' => 'Read-only Viewer',
    ],
    default: ['editor']
);

confirm() 和 search() 在流程控制中的真实作用

confirm() 看似简单,但它返回的是布尔值,常被误用于「跳过后续步骤」的分支判断——这没问题,但要注意它不支持自定义 yes/no 提示文本(Laravel Prompts v0.1.x 尚未开放该参数)。而 search() 更容易被当成「模糊查找框」,其实它是基于 PHP 的 str_contains() 做客户端过滤,不发请求、不支持正则、不支持异步加载:

  • confirm() 的提示文案固定为「Do you wish to continue?」,如需定制,目前只能 fork 或等后续版本;临时方案是用 select() 模拟
  • search() 的 options 必须是完整列表(不能是闭包或 Generator),否则无法实时过滤;大数据集(>500 项)会导致卡顿
  • 两者都支持 required: false,但 confirm() 设为 false 时,按 Ctrl+C 会抛 Exception,需 try/catch
$continue = confirm('Deploy to production?');

if (! $continue) {
    exit("Aborted.\n");
}

$users = search(
    label: 'Find user by name',
    options: User::pluck('name', 'id')->toArray(),
    placeholder: 'Type to filter...'
);

真正难的不是调用哪个函数,而是决定何时用 search() 替代 select()、何时把多个 text() 合并进一个表单对象、以及怎么让错误提示不打断用户节奏——这些没有 API 文档会写,得靠终端交互直觉和反复测试。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

817

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

795

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2388

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3341

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

4690

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

3136

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

5989

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1356

2026.03.04

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn