前言
Laravel Prompts 是為命令列應用程式加入美觀好用的互動式表單的 PHP 套件。 提供類似瀏覽器表單的體驗,如佔位文字、驗證等。 由於可直接在 Artisan 指令的程式碼中呼叫,能簡潔而直覺地寫出對使用者的問答。Laravel Prompts 支援 macOS、Linux、Windows(WSL)。
在不支援的環境會自動切換為 fallback 行為。
安裝
Laravel Prompts 已隨 Laravel 本體一併提供,無需另行安裝。 若要在其他 PHP 專案使用,可透過 Composer 安裝:基本 prompt 函式
text — 文字輸入
以text() 要求使用者輸入字串。
required 可將輸入設為必填。也可自訂驗證訊息。
validate closure 追加驗證。回傳錯誤訊息,或於合格時回傳 null。
textarea — 多行文字輸入
textarea() 接受多行輸入。
number — 數字輸入
number() 接受數字。可用上下方向鍵增減值。
password — 密碼輸入
password() 與文字輸入類似,但輸入內容不會顯示在畫面上。
confirm — Yes/No 確認
confirm() 讓使用者做二擇一的確認。回傳 true 或 false。
select — 選擇清單
select() 讓使用者從清單中選一個。
scroll 變更卷動前顯示的選項數量(預設 5 個)。
multiselect — 複選
multiselect() 讓使用者同時選多個選項。
required 可要求至少選一個。
suggest — 附自動完成的輸入
suggest() 在提供候選的同時也接受自由輸入。
search — 動態搜尋
search() 會在每次輸入時更新候選清單。closure 回傳的陣列即為候選。
multisearch — 動態複選
multisearch() 可透過動態搜尋進行複選。
pause — 暫停
用pause() 提示使用者按下 Enter 鍵,暫停處理流程。
autocomplete — 行內補全
autocomplete() 是以 ghost text 顯示候選的行內補全函式。與 suggest() 不同,使用者每次輸入時符合的候選會以 ghost text 顯示,按 Tab 或右方向鍵即可確定補全。
驗證
所有 prompt 函式皆可透過validate 引數設定驗證。
null 表示驗證通過。
也可以陣列形式使用 Laravel 的驗證規則。
transform 引數。
Form
使用form() 可將多個 prompt 合為一組,在完成前可整批取消。
資訊輸出
提供帶樣式輸出文字訊息的函式。Callout
callout() 會將標籤與內容以框線顯示。適合突出顯示部署摘要、錯誤詳情、狀態更新等重要資訊。
type 引數指定 'warning' 或 'error',可變更視覺樣式。
info 引數加入頁尾行。便於顯示 ID 或時間戳等中繼資料。
豐富內容
以陣列取代字串,可製作結構化的豐富 callout。Element 類別提供建立標題、項目符號清單、編號清單、鍵值清單與連結的 factory 方法。
Element::keyValueList 顯示附標籤的資料。
Element::link 會在支援 OSC 8 的終端機中產生可點擊的超連結。可只傳 URL,或傳 URL 加自訂 label。
表格顯示
table() 可以表格形式顯示資料。
Spin(載入顯示)
spin() 會在 closure 執行期間顯示載入指示器。
進度條
progress() 可視覺化顯示反覆處理的進度。
Task
task() 會在 callback 執行期間顯示 spinner 與可捲動的即時輸出區域。非常適合包裝依賴安裝或部署腳本等長時間執行的處理,可即時看到發生的事。
Logger 實例,可即時顯示日誌行或狀態訊息。
輸出日誌行
以line 方法逐行寫入捲動輸出區。
狀態訊息
使用success、warning、error 可在捲動日誌區的上方顯示固定的高亮訊息。
更新標籤
以label 方法可在執行中更新任務標籤。subLabel 方法會設定顯示在標籤下方的淡色 sub label。傳入空字串可清除 sub label。也能用 subLabel 引數指定初始 sub label。
文字串流
對於像 AI 生成回應那樣階段性產生的輸出,可用partial 方法逐個串流文字。串流完成後呼叫 commitPartial 進行確定。
輸出上限與 summary 的保留
預設最多顯示 10 行捲動輸出。可用limit 引數自訂。若要在任務完成後仍將狀態訊息保留在畫面上,可傳入 keepSummary: true。
Stream
stream() 會將文字階段性顯示到終端機。適合顯示 AI 生成內容或以 chunk 形式抵達的資料。
append 方法會以 fade-in 效果將文字加入 stream。所有內容 stream 完後呼叫 close,即可確定輸出並復原游標。
終端機操作
設定終端機標題
清除終端機
終端機相關考量
終端機寬度:當標籤、選項、驗證訊息超過終端機欄數時,會自動被截斷。若以 80 欄為前提,建議控制在 74 字元以內。 終端機高度:接受scroll 引數的 prompt 會自動調整值,使其含驗證訊息空間也能容納於終端機高度內。
Fallback
在不支援的環境(如 Windows non-WSL)會自動 fallback。 預設會改用 Laravel 的$this->ask()、$this->choice() 等內建方法。
測試
Laravel Prompts 可與 Pest 或 PHPUnit 的測試整合。相關頁面
Artisan Console
在 Artisan 指令中活用 Prompts