yii2 / Console - yii2开发控制台应用时的还我漂漂拳
之所以放到此專欄主要是該文章對(duì)我們學(xué)習(xí)yii2-queue有很大幫助。
我們經(jīng)常使用yii2開發(fā)命令行應(yīng)用,也會(huì)遇到比如讓用戶在命令行輸入信息、選擇等操作,今天為大家介紹的這個(gè)yii2的Console類輕松的幫你搞定這件事情,有了它,你的命令行應(yīng)用將更加高逼格。為了學(xué)習(xí)更簡(jiǎn)單,我們用問答的形式開始。
Console在哪里?
Console是yii2的一個(gè)幫助類,所在文件夾為 /vendor/yiisoft/yii2/helpers,里面有 BaseConsole 和 Console ,Console類繼承于BaseConsole,BaseConsole不允許被調(diào)用,因此我們都是使用Console類。
在代碼里要使用套路
use yii\helpers\Console; ... Console::xxxx()Hello World
當(dāng)我們開發(fā)yii2的控制臺(tái)應(yīng)用的時(shí)候,可以echo一個(gè)字符串,這樣命令行會(huì)顯示,那么用Console如何實(shí)現(xiàn)那?看代碼
public function actionIndex() {Console::output(“Hello World”); }對(duì),用Console::output,你可能會(huì)說(shuō),“這還沒有echo簡(jiǎn)單那?”,那么我們接著看。
五彩繽紛的Hello World
我現(xiàn)在想讓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可以為字符串增加更多樣式。
關(guān)鍵在于ansiFormat的第二個(gè)參數(shù),這是一個(gè)數(shù)組,除了能傳遞FG_開頭的前景色,還能傳遞BG_開頭的背景色,也就是說(shuō)我們不但能改變字體的顏色,還能加背景,比如接下來(lái)的這行代碼
$hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);看圖說(shuō)話
那么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
哥,內(nèi)容能加粗么?
必須的了,你以為就是顏色么?下面把其他樣式再說(shuō)下,比如加粗、斜體等等,看代碼
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]));如果你的英文不達(dá)標(biāo)可以看效果圖
我想得到用戶輸入的
沒錯(cuò),這是一個(gè)程序最基本的功能,Console當(dāng)然也可以,就像下面的程序,我們讓用戶輸入名字,然后再輸出。
$name = Console::input("請(qǐng)輸入你的名字:");$formatName = Console::ansiFormat($name,[Console::FG_YELLOW]); Console::output("你的名字是:{$formatName}");用 Console::input,還能添加提示語(yǔ),看看結(jié)果是不是很有趣。
用戶寫太危險(xiǎn),我要他選擇。
你說(shuō)的有道理,你是要用戶進(jìn)行單選題是吧,比如性別等。
$sex = Console::select("性別:",[1=>'男',2=>'女']);$formatSex = Console::ansiFormat($sex,[Console::FG_YELLOW]); Console::output("你的性別是:{$formatSex}");Console::select 施展著小魔法
YES OR NO
讓你選擇yes還是no,這種情況在我們使用命令行安裝東西的時(shí)候經(jīng)常遇到,用yii2的Console如何實(shí)現(xiàn)這樣的需求那?只需要一個(gè) Console::confirm 方法。
if (Console::confirm("Are you sure?")) {Console::output("user input yes"); }else{Console::output("user input no"); }哇哦,邏輯判斷又出來(lái)了,Console幫你實(shí)現(xiàn)著計(jì)算機(jī)軟件的邏輯。
聰明的你一定發(fā)現(xiàn)了吧,如果你不輸入直接回車則在上面的代碼中表示你選擇了no,具體是yes還是no取決于confirm的第二個(gè)參數(shù)是true還是false。
還有更你x的么?
那就說(shuō)一個(gè),上面我們說(shuō)了用戶輸入是不靠譜的,因此Console也提供了一個(gè)驗(yàn)證方法,看代碼
Console::prompt("你的名字",['required'=>true,'error'=>'必須輸入']);prompt很像yii2中ar的rules方法,對(duì)每個(gè)輸入進(jìn)行驗(yàn)證,通過才能繼續(xù)下面的代碼,比如上面的代碼是說(shuō)必須填寫,否則拋出錯(cuò)誤信息并讓你繼續(xù)輸入
關(guān)于prompt方法主要是第二個(gè)參數(shù)進(jìn)行限制,這是一個(gè)數(shù)組類型的參數(shù),里面的值為
- required 真假,是否必須填寫
- default 默認(rèn)值
- pattern 正則匹配
- validator 自定義驗(yàn)證函數(shù)
- error 錯(cuò)誤信息
夠強(qiáng)大的了吧。
最后一個(gè)巨牛逼的
為了亮瞎你的眼,我覺得先上效果圖
帥氣吧,你在linux系統(tǒng)上應(yīng)該不止一次看到它吧,用Console也可以輕松實(shí)現(xiàn)
Console::startProgress(0, 1000); for ($n = 1; $n <= 1000; $n++) {usleep(1000);Console::updateProgress($n, 1000);} Console::endProgress();startProgress、updateProgress、endProgress。
三個(gè)你一眼可以看懂的函數(shù)就可以搞定,具體什么時(shí)候使用,發(fā)揮你強(qiáng)大的想象力吧。
小結(jié)
多么有趣的Console類,當(dāng)然其實(shí)還有很多小方法,比如清空命令行,屏幕尺寸、字符串長(zhǎng)度等等,總之你的控制臺(tái)離不開它。
原文鏈接 http://nai8.me/article/index....總結(jié)
以上是生活随笔為你收集整理的yii2 / Console - yii2开发控制台应用时的还我漂漂拳的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挨踢脱口秀精选集汇总
- 下一篇: CUDA学习(九十一)