W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CodeIgniter的CLI庫使創(chuàng)建交互式命令行腳本變得簡單,包括:
您無需創(chuàng)建CLI庫的實(shí)例,因為它的所有方法都是靜態(tài)的。相反,您只需要確保您的控制器可以通過use
類上方的一條語句找到它:
<?php namespace App\Controllers;
use CodeIgniter\CLI\CLI;
class MyController extends \CodeIgniter\Controller
{
. . .
}
首次加載文件時,該類會自動初始化。
有時您需要詢問用戶更多信息。他們可能沒有提供可選的命令行參數(shù),或者腳本可能遇到了現(xiàn)有文件,需要在覆蓋前進(jìn)行確認(rèn)。這是用prompt()
方法處理的。
您可以通過將其作為第一個參數(shù)傳遞來提供問題:
$color = CLI::prompt('What is your favorite color?');
您可以通過在第二個參數(shù)中傳遞默認(rèn)值來提供默認(rèn)答案,如果用戶只是按下Enter鍵,則將使用該默認(rèn)答案:
$color = CLI::prompt('What is your favorite color?', 'blue');
您可以通過傳入允許的答案數(shù)組作為第二個參數(shù)來限制可接受的答案:
$overwrite = CLI::prompt('File exists. Overwrite?', ['y','n']);
最后,您可以將驗證規(guī)則作為第三個參數(shù)傳遞給答案輸入:
$email = CLI::prompt('What is your email?', null, 'required|valid_email');
write()
提供了幾種方法來向用戶提供反饋。這可以像單個狀態(tài)更新一樣簡單,也可以像包裝到用戶終端窗口的復(fù)雜信息表一樣簡單。該write()
方法的核心是將字符串作為第一個參數(shù)輸出的方法:
CLI::write('The rain in Spain falls mainly on the plains.');
您可以通過輸入顏色名稱作為第二個參數(shù)來更改文本的顏色:
CLI::write('File created.', 'green');
這可用于按狀態(tài)區(qū)分消息,或使用其他顏色創(chuàng)建“標(biāo)題”。您甚至可以通過將顏色名稱作為第三個參數(shù)傳遞來設(shè)置背景色:
CLI::write('File overwritten.', 'light_red', 'dark_gray');
可以使用以下前景色:
較小的數(shù)字可用作背景色:
print()
打印功能與write()
方法相同,除了它不會在換行符之前或之后強(qiáng)制換行。而是將其打印到當(dāng)前光標(biāo)所在的屏幕上。這使您可以從不同的呼叫在同一行上打印多個項目。當(dāng)您要顯示狀態(tài),執(zhí)行某些操作然后在同一行上打印“完成”時,這特別有用:
for ($i = 0; $i <= 10; $i++)
{
CLI::print($i);
}
color()
盡管該write()
命令將單行寫入終端,并以EOL字符結(jié)尾,但是您可以使用該color()
方法制作可以以相同方式使用的字符串片段,除了在打印后不會強(qiáng)制EOL。這使您可以在同一行上創(chuàng)建多個輸出?;蛘?,更常見的是,可以在write()
方法內(nèi)部使用它在內(nèi)部創(chuàng)建其他顏色的字符串:
CLI::write("fileA \t". CLI::color('/path/to/file', 'white'), 'yellow');
本示例將在窗口中寫一行,先以fileA
黃色,然后是制表符,然后 /path/to/file
是白色文本。
error()
如果需要輸出錯誤,則應(yīng)使用適當(dāng)命名的error()
方法。像執(zhí)行操作一樣write()
,這會將淺紅色文本寫入STDERR,而不是STDOUT color()
。如果您有腳本在監(jiān)視錯誤,這樣它們就不必篩選所有信息,而僅篩選實(shí)際的錯誤消息,這將很有用。您完全按照以下write()
方法使用它:
CLI::error('Cannot write to file: ' . $file);
wrap()
該命令將獲取一個字符串,開始在當(dāng)前行上打印它,并在新行上將其包裝為設(shè)置的長度。當(dāng)在您希望在當(dāng)前窗口中顯示而不是離開屏幕的選項列表中顯示說明時,這可能會很有用:
CLI::color("task1\t", 'yellow');
CLI::wrap("Some long description goes here that might be longer than the current window.");
默認(rèn)情況下,字符串將以終端寬度環(huán)繞。Windows當(dāng)前不提供確定窗口大小的方法,因此我們默認(rèn)使用80個字符。如果您想將寬度限制為更短一些,以確??梢酝耆m合窗口,請將最大行長作為第二個參數(shù)傳遞。這將在最接近的單詞障礙處斷開字符串,以便不會損壞單詞。
// Wrap the text at max 20 characters wide
CLI::wrap($description, 20);
您可能會發(fā)現(xiàn)標(biāo)題,文件或任務(wù)的左側(cè)需要一列,而標(biāo)題及其說明的右側(cè)則需要一列文本。默認(rèn)情況下,這將回繞到窗口的左邊緣,這不允許事物按列排列。在這種情況下,您可以傳遞多個空格以填充第一行之后的每一行,以便在左側(cè)留下清晰的列邊緣:
// Determine the maximum length of all titles
// to determine the width of the left column
$maxlen = max(array_map('strlen', $titles));
for ($i=0; $i <= count($titles); $i++)
{
CLI::write(
// Display the title on the left of the row
$title[$i] . ' ' .
// Wrap the descriptions in a right-hand column
// with its left side 3 characters wider than
// the longest item on the left.
CLI::wrap($descriptions[$i], 40, $maxlen + 3)
);
}
將創(chuàng)建如下內(nèi)容:
task1a Lorem Ipsum is simply dummy
text of the printing and typesetting
industry.
task1abc Lorem Ipsum has been the industry's
standard dummy text ever since the
newLine()
該newLine()
方法向用戶顯示空白行。它不帶任何參數(shù):
CLI::newLine();
clearScreen()
您可以使用該clearScreen()
方法清除當(dāng)前終端窗口。在Windows的大多數(shù)版本中,由于Windows不支持此功能,因此只會插入40行空白行。Windows 10 bash集成應(yīng)更改此:
CLI::clearScreen();
showProgress()
如果您有一個長期運(yùn)行的任務(wù),想讓用戶了解進(jìn)度,則可以使用 showProgress()
顯示如下內(nèi)容的方法:
[####......] 40% Complete
該塊在適當(dāng)位置具有動畫效果,效果非常好。
要使用它,請將當(dāng)前步驟作為第一個參數(shù),并將步驟總數(shù)作為第二個參數(shù)。完成百分比和顯示長度將根據(jù)該數(shù)字確定。完成后,將pass false
作為第一個參數(shù),進(jìn)度條將被刪除。
$totalSteps = count($tasks);
$currStep = 1;
foreach ($tasks as $task)
{
CLI::showProgress($currStep++, $totalSteps);
$task->run();
}
// Done, so erase it...
CLI::showProgress(false);
table()
$thead = ['ID', 'Title', 'Updated At', 'Active'];
$tbody = [
[7, 'A great item title', '2017-11-15 10:35:02', 1],
[8, 'Another great item title', '2017-11-16 13:46:54', 0]
];
CLI::table($tbody, $thead);
+----+--------------------------+---------------------+--------+
| ID | Title | Updated At | Active |
+----+--------------------------+---------------------+--------+
| 7 | A great item title | 2017-11-16 10:35:02 | 1 |
| 8 | Another great item title | 2017-11-16 13:46:54 | 0 |
+----+--------------------------+---------------------+--------+
wait()
等待一定的秒數(shù),可以選擇顯示一條等待消息并等待按鍵。
// wait for specified interval, with countdown displayed
CLI::wait($seconds, true);
// show continuation message and wait for input
CLI::wait(0, false);
// wait for specified interval
CLI::wait($seconds, false);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: