99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

CodeIgniter4 CLI Library

2020-08-17 18:14 更新

CodeIgniter的CLI庫(kù)使創(chuàng)建交互式命令行腳本變得簡(jiǎn)單,包括:

  • 提示用戶更多信息
  • 在終端上寫彩色文本
  • Beeping(變得更好?。?/li>
  • 在長(zhǎng)任務(wù)中顯示進(jìn)度條
  • 包裝長(zhǎng)文本行以適合窗口。

初始化類

您無(wú)需創(chuàng)建CLI庫(kù)的實(shí)例,因?yàn)樗乃蟹椒ǘ际庆o態(tài)的。相反,您只需要確保您的控制器可以通過(guò)use類上方的一條語(yǔ)句找到它:

<?php namespace App\Controllers;


use CodeIgniter\CLI\CLI;


class MyController extends \CodeIgniter\Controller
{
        . . .
}

首次加載文件時(shí),該類會(huì)自動(dòng)初始化。

從用戶那里獲取輸入

有時(shí)您需要詢問(wèn)用戶更多信息。他們可能沒(méi)有提供可選的命令行參數(shù),或者腳本可能遇到了現(xiàn)有文件,需要在覆蓋前進(jìn)行確認(rèn)。這是用prompt()方法處理的。

您可以通過(guò)將其作為第一個(gè)參數(shù)傳遞來(lái)提供問(wèn)題:

$color = CLI::prompt('What is your favorite color?');

您可以通過(guò)在第二個(gè)參數(shù)中傳遞默認(rèn)值來(lái)提供默認(rèn)答案,如果用戶只是按下Enter鍵,則將使用該默認(rèn)答案:

$color = CLI::prompt('What is your favorite color?', 'blue');

您可以通過(guò)傳入允許的答案數(shù)組作為第二個(gè)參數(shù)來(lái)限制可接受的答案:

$overwrite = CLI::prompt('File exists. Overwrite?', ['y','n']);

最后,您可以將驗(yàn)證規(guī)則作為第三個(gè)參數(shù)傳遞給答案輸入:

$email = CLI::prompt('What is your email?', null, 'required|valid_email');

提供反饋

write()

提供了幾種方法來(lái)向用戶提供反饋。這可以像單個(gè)狀態(tài)更新一樣簡(jiǎn)單,也可以像包裝到用戶終端窗口的復(fù)雜信息表一樣簡(jiǎn)單。該write() 方法的核心是將字符串作為第一個(gè)參數(shù)輸出的方法:

CLI::write('The rain in Spain falls mainly on the plains.');

您可以通過(guò)輸入顏色名稱作為第二個(gè)參數(shù)來(lái)更改文本的顏色:

CLI::write('File created.', 'green');

這可用于按狀態(tài)區(qū)分消息,或使用其他顏色創(chuàng)建“標(biāo)題”。您甚至可以通過(guò)將顏色名稱作為第三個(gè)參數(shù)傳遞來(lái)設(shè)置背景色:

CLI::write('File overwritten.', 'light_red', 'dark_gray');

可以使用以下前景色:

  • black
  • dark_gray
  • blue
  • dark_blue
  • light_blue
  • green
  • light_green
  • cyan
  • light_cyan
  • red
  • light_red
  • purple
  • light_purple
  • light_yellow
  • yellow
  • light_gray
  • white

較小的數(shù)字可用作背景色:

  • black
  • blue
  • green
  • cyan
  • red
  • yellow
  • light_gray
  • magenta

print()

打印功能與write()方法相同,除了它不會(huì)在換行符之前或之后強(qiáng)制換行。而是將其打印到當(dāng)前光標(biāo)所在的屏幕上。這使您可以從不同的呼叫在同一行上打印多個(gè)項(xiàng)目。當(dāng)您要顯示狀態(tài),執(zhí)行某些操作然后在同一行上打印“完成”時(shí),這特別有用:

for ($i = 0; $i <= 10; $i++)
{
    CLI::print($i);
}

color()

盡管該write()命令將單行寫入終端,并以EOL字符結(jié)尾,但是您可以使用該color()方法制作可以以相同方式使用的字符串片段,除了在打印后不會(huì)強(qiáng)制EOL。這使您可以在同一行上創(chuàng)建多個(gè)輸出?;蛘?,更常見的是,可以在write()方法內(nèi)部使用它在內(nèi)部創(chuàng)建其他顏色的字符串:

CLI::write("fileA \t". CLI::color('/path/to/file', 'white'), 'yellow');

本示例將在窗口中寫一行,先以fileA黃色,然后是制表符,然后 /path/to/file是白色文本。

error()

如果需要輸出錯(cuò)誤,則應(yīng)使用適當(dāng)命名的error()方法。像執(zhí)行操作一樣write(),這會(huì)將淺紅色文本寫入STDERR,而不是STDOUT color()。如果您有腳本在監(jiān)視錯(cuò)誤,這樣它們就不必篩選所有信息,而僅篩選實(shí)際的錯(cuò)誤消息,這將很有用。您完全按照以下write()方法使用它:

CLI::error('Cannot write to file: ' . $file);

wrap()

該命令將獲取一個(gè)字符串,開始在當(dāng)前行上打印它,并在新行上將其包裝為設(shè)置的長(zhǎng)度。當(dāng)在您希望在當(dāng)前窗口中顯示而不是離開屏幕的選項(xiàng)列表中顯示說(shuō)明時(shí),這可能會(huì)很有用:

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個(gè)字符。如果您想將寬度限制為更短一些,以確保可以完全適合窗口,請(qǐng)將最大行長(zhǎng)作為第二個(gè)參數(shù)傳遞。這將在最接近的單詞障礙處斷開字符串,以便不會(huì)損壞單詞。

// Wrap the text at max 20 characters wide
CLI::wrap($description, 20);

您可能會(huì)發(fā)現(xiàn)標(biāo)題,文件或任務(wù)的左側(cè)需要一列,而標(biāo)題及其說(shuō)明的右側(cè)則需要一列文本。默認(rèn)情況下,這將回繞到窗口的左邊緣,這不允許事物按列排列。在這種情況下,您可以傳遞多個(gè)空格以填充第一行之后的每一行,以便在左側(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不支持此功能,因此只會(huì)插入40行空白行。Windows 10 bash集成應(yīng)更改此:

CLI::clearScreen();

showProgress()

如果您有一個(gè)長(zhǎng)期運(yùn)行的任務(wù),想讓用戶了解進(jìn)度,則可以使用 showProgress()顯示如下內(nèi)容的方法:

[####......] 40% Complete

該塊在適當(dāng)位置具有動(dòng)畫效果,效果非常好。

要使用它,請(qǐng)將當(dāng)前步驟作為第一個(gè)參數(shù),并將步驟總數(shù)作為第二個(gè)參數(shù)。完成百分比和顯示長(zhǎng)度將根據(jù)該數(shù)字確定。完成后,將pass false作為第一個(gè)參數(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);
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)