yii2 / Console - yii2开发控制台应用时的还我漂漂拳
之所以放到此專欄主要是該文章對我們學習yii2-queue有很大幫助。
我們經常使用yii2開發命令行應用,也會遇到比如讓用戶在命令行輸入信息、選擇等操作,今天為大家介紹的這個yii2的Console類輕松的幫你搞定這件事情,有了它,你的命令行應用將更加高逼格。為了學習更簡單,我們用問答的形式開始。
Console在哪里?
Console是yii2的一個幫助類,所在文件夾為 /vendor/yiisoft/yii2/helpers,里面有 BaseConsole 和 Console ,Console類繼承于BaseConsole,BaseConsole不允許被調用,因此我們都是使用Console類。
在代碼里要使用套路
use yii\helpers\Console; ... Console::xxxx()Hello World
當我們開發yii2的控制臺應用的時候,可以echo一個字符串,這樣命令行會顯示,那么用Console如何實現那?看代碼
public function actionIndex() {Console::output(“Hello World”); }對,用Console::output,你可能會說,“這還沒有echo簡單那?”,那么我們接著看。
五彩繽紛的Hello World
我現在想讓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可以為字符串增加更多樣式。
關鍵在于ansiFormat的第二個參數,這是一個數組,除了能傳遞FG_開頭的前景色,還能傳遞BG_開頭的背景色,也就是說我們不但能改變字體的顏色,還能加背景,比如接下來的這行代碼
$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);看圖說話
那么Console一共支持多少種前景色和背景色那?
- 前景色 FG_BLACK / FG_RED / FG_GREEN / FG_YELLOW / FG_BLUE / FG_PURPLE / FG_CYAN / FG_GREY
- 背景色 BG_BLACK / BG_RED / BG_GREEN / BG_YELLOW / BG_BLUE / BG_PURPLE / BG_CYAN / BG_GREY
哥,內容能加粗么?
必須的了,你以為就是顏色么?下面把其他樣式再說下,比如加粗、斜體等等,看代碼
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 OR NO
讓你選擇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。
還有更你x的么?
那就說一個,上面我們說了用戶輸入是不靠譜的,因此Console也提供了一個驗證方法,看代碼
Console::prompt("你的名字",['required'=>true,'error'=>'必須輸入']);prompt很像yii2中ar的rules方法,對每個輸入進行驗證,通過才能繼續下面的代碼,比如上面的代碼是說必須填寫,否則拋出錯誤信息并讓你繼續輸入
關于prompt方法主要是第二個參數進行限制,這是一個數組類型的參數,里面的值為
- required 真假,是否必須填寫
- default 默認值
- pattern 正則匹配
- validator 自定義驗證函數
- error 錯誤信息
夠強大的了吧。
最后一個巨牛逼的
為了亮瞎你的眼,我覺得先上效果圖
帥氣吧,你在linux系統上應該不止一次看到它吧,用Console也可以輕松實現
Console::startProgress(0, 1000); for ($n = 1; $n <= 1000; $n++) {usleep(1000);Console::updateProgress($n, 1000);} Console::endProgress();startProgress、updateProgress、endProgress。
三個你一眼可以看懂的函數就可以搞定,具體什么時候使用,發揮你強大的想象力吧。
小結
多么有趣的Console類,當然其實還有很多小方法,比如清空命令行,屏幕尺寸、字符串長度等等,總之你的控制臺離不開它。
原文鏈接 http://nai8.me/article/index....總結
以上是生活随笔為你收集整理的yii2 / Console - yii2开发控制台应用时的还我漂漂拳的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挨踢脱口秀精选集汇总
- 下一篇: Javascript获取数组中的最大值和