之因此放到此專欄主要是該文章對咱們學習yii2-queue有很大幫助。php
咱們常常使用yii2開發命令行應用,也會遇到好比讓用戶在命令行輸入信息、選擇等操做,今天爲你們介紹的這個yii2的Console類輕鬆的幫你搞定這件事情,有了它,你的命令行應用將更加高逼格。linux
爲了學習更簡單,咱們用問答的形式開始。數組
Console是yii2的一個幫助類,所在文件夾爲 /vendor/yiisoft/yii2/helpers,裏面有 BaseConsole 和 Console ,Console類繼承於BaseConsole,BaseConsole不容許被調用,所以咱們都是使用Console類。yii2
在代碼裏要使用套路yii
use yii\helpers\Console;
...
Console::xxxx()
複製代碼
當咱們開發yii2的控制檯應用的時候,能夠echo一個字符串,這樣命令行會顯示,那麼用Console如何實現那?看代碼函數
public function actionIndex() {
Console::output(「Hello World」);
}
複製代碼
對,用Console::output,你可能會說,「這尚未echo簡單那?」,那麼咱們接着看。學習
我如今想讓Hello是黃色的,World是綠色的,怎麼玩?字體
public function actionIndex() {
$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW]);
$world = Console::ansiFormat("World",[Console::FG_GREEN]);
Console::output("{$hello} {$world}");
}
複製代碼
Console::ansiFormat能夠爲字符串增長更多樣式。ui
關鍵在於ansiFormat的第二個參數,這是一個數組,除了能傳遞FG_開頭的前景色,還能傳遞BG_開頭的背景色,也就是說咱們不但能改變字體的顏色,還能加背景,好比接下來的這行代碼spa
$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);
複製代碼
看圖說話
那麼Console一共支持多少種前景色和背景色那?
必須的了,你覺得就是顏色麼?下面把其餘樣式再說下,好比加粗、斜體等等,看代碼
Console::output(Console::ansiFormat("normal",[Console::NORMAL]));
Console::output(Console::ansiFormat("bold",[Console::BOLD]));
Console::output(Console::ansiFormat("italic",[Console::ITALIC]));
Console::output(Console::ansiFormat("underline",[Console::UNDERLINE]));
Console::output(Console::ansiFormat("negative",[Console::NEGATIVE]));
複製代碼
若是你的英文不達標能夠看效果圖
沒錯,這是一個程序最基本的功能,Console固然也能夠,就像下面的程序,咱們讓用戶輸入名字,而後再輸出。
$name = Console::input("請輸入你的名字:");
$formatName = Console::ansiFormat($name,[Console::FG_YELLOW]);
Console::output("你的名字是:{$formatName}");
複製代碼
用 Console::input,還能添加提示語,看看結果是否是頗有趣。
你說的有道理,你是要用戶進行單選題是吧,好比性別等。
$sex = Console::select("性別:",[1=>'男',2=>'女']);
$formatSex = Console::ansiFormat($sex,[Console::FG_YELLOW]);
Console::output("你的性別是:{$formatSex}");
複製代碼
Console::select 施展着小魔法
讓你選擇yes仍是no,這種狀況在咱們使用命令行安裝東西的時候常常遇到,用yii2的Console如何實現這樣的需求那?只須要一個 Console::confirm 方法。
if (Console::confirm("Are you sure?")) {
Console::output("user input yes");
}else{
Console::output("user input no");
}
複製代碼
哇哦,邏輯判斷又出來了,Console幫你實現着計算機軟件的邏輯。
聰明的你必定發現了吧,若是你不輸入直接回車則在上面的代碼中表示你選擇了no,具體是yes仍是no取決於confirm的第二個參數是true仍是false。
那就說一個,上面咱們說了用戶輸入是不靠譜的,所以Console也提供了一個驗證方法,看代碼
Console::prompt("你的名字",['required'=>true,'error'=>'必須輸入']);
複製代碼
prompt很像yii2中ar的rules方法,對每一個輸入進行驗證,經過才能繼續下面的代碼,好比上面的代碼是說必須填寫,不然拋出錯誤信息並讓你繼續輸入
關於prompt方法主要是第二個參數進行限制,這是一個數組類型的參數,裏面的值爲
夠強大的了吧。
爲了亮瞎你的眼,我以爲先上效果圖
帥氣吧,你在linux系統上應該不止一次看到它吧,用Console也能夠輕鬆實現
Console::startProgress(0, 1000);
for ($n = 1; $n <= 1000; $n++) {
usleep(1000);
Console::updateProgress($n, 1000);
}
Console::endProgress();
複製代碼
startProgress、updateProgress、endProgress。
三個你一眼能夠看懂的函數就能夠搞定,具體何時使用,發揮你強大的想象力吧。
多麼有趣的Console類,固然其實還有不少小方法,好比清空命令行,屏幕尺寸、字符串長度等等,總之你的控制檯離不開它。
阿北的知識分享 https://nai8.me