3分鐘短文:膽兒真肥!Laravel在命令行問用戶要數(shù)據(jù)段只!

引言

上一章我教會大家如何在3分鐘的時間腮猖,通過laravel躋身geek之列(聽一下就好[捂嘴.jpg])。實(shí)現(xiàn)了一個簡單的命令行赞枕,和一個復(fù)雜的發(fā)送郵件通知的功能澈缺。
可是細(xì)心的讀者你發(fā)現(xiàn)了沒有,使用自定義的命令行炕婶,全程我們沒有輸入一個參數(shù)姐赡,沒有一個數(shù)據(jù),這柠掂,這项滑,這,太不尋常了吧涯贞!

img

linux下的命令枪狂,沒有一個是不帶參數(shù)自己玩兒的!所以本文教你改造命令行宋渔,做一個標(biāo)準(zhǔn)的應(yīng)用程序州疾。

事前詢問

首先我們要區(qū)分獲取參數(shù)的兩種方式,一種是在輸入命令行時直接給定的傻谁,還有一種是在程序運(yùn)行過程中孝治,等待用戶輸入信息之后才能繼續(xù)列粪。
先說第一種方式审磁,也分為兩種,一種叫參數(shù) argument岂座,一種叫選項(xiàng) option态蒂。在laravel程序里,這兩個名字沒有變化费什。

比如钾恢,有一個密碼重置的命令行工具,要求傳入一個 userId 用于標(biāo)記用戶的身份鸳址,在類的聲明中指明使用方式:

protected $signature = 'password:reset {userId}';

假設(shè)上述類已經(jīng)完成功能開發(fā)瘩蚪,在命令行中調(diào)用:

php artisan password:reset 5

在代碼中使用 $this->argument() 方法,打印其結(jié)果是一個數(shù)組稿黍,內(nèi)容如下:

[
    "command": "password:reset",
    "userId': "5",
]

如果要返回指定的參數(shù)值疹瘦,只需傳入鍵名即可:

$this->argument('userId'); // 5

返回的就是命令行上傳送的參數(shù)。這個 {userId} 的寫法就是 argument巡球,稱為 參數(shù)言沐。

還有一種方式是選項(xiàng) option邓嘹,聲明的時候,要在方法內(nèi)這樣寫:

protected $signature = 'password:reset {--userId=}';

這就是聲明一個選項(xiàng)了险胰,使用命令行的時候數(shù)據(jù)傳送方式也不一樣:

php artisan password:reset --userId=5

程序里要用 $this->option() 來獲取汹押,打印數(shù)組內(nèi)容如下:

[
    "userId" => "5"
    "help" => false
    "quiet" => false
    "verbose" => false
    "version" => false
    "ansi" => false
    "no-ansi" => false
    "no-interaction" => false
    "env" => null
]

比 argument 打印的內(nèi)容豐富的多,為什么起便?因?yàn)槟切┦耹aravel Command 類默認(rèn)追加上的棚贾,只要繼承了基類都天然自帶這些選項(xiàng)。

用法類似榆综,獲取單個的選項(xiàng)值鸟悴,只要傳入鍵名就可以了:

$this->option('userId');

為了演示兩個方法的用法,我們?yōu)槊钚姓{(diào)用方式聲明兩種獲取參數(shù)的方式:

protected $signature = 'password:reset {userId : user ID} {--sendEmail : Send email or NOT}';

在程序里我們要分別獲取奖年,下面是手動實(shí)現(xiàn) handle 處理方法:

public function handle()
{
    // 所有參數(shù)
    $arguments = $this->argument();
    $userid = $this->argument('userId');
    
    // 所有選項(xiàng)
    $options = $this->option();
    $sendEmail = $this->option('sendEmail');
}

事中確認(rèn)

有些參數(shù)是要在程序運(yùn)行中對用戶進(jìn)行詢問细诸,下面就介紹幾個常用的方法。

ask方法需要用戶輸入字符串內(nèi)容:

$email = $this->ask('What is your email address?');

如果輸入的是密碼敏感數(shù)據(jù)陋守,默認(rèn)是不能展示在終端的震贵,使用 secret方法:

$password = $this->secret('What is the password?');

有時候是詢問用戶是或者否,那就用 confirm方法:

if ($this->confirm('Do you want to reset the password?')) {
//
}

還有一些水评,盡量減少用戶輸入猩系,使用選項(xiàng)的方式,讓用戶選中燥,這樣輸入的采集數(shù)據(jù)基本不會出錯寇甸。使用 choice方法:

$level = $this->choice('What is the level?', ['low', 'middle', 'high'], 0);

有這幾個助陣,基本上夠用了疗涉,做一個有些復(fù)雜的中型的命令行工具拿霉,只要PHP還運(yùn)行的動,處理的來咱扣,基本沒啥問題绽淘。

寫在最后

本文我們講述了兩個重要的概念,參數(shù)和選項(xiàng)闹伪。在設(shè)計(jì)命令行的時候一定要想清楚沪铭,規(guī)劃好,到底用哪一個偏瓤,在代碼中才能有的放矢地讀取杀怠。并且使用詢問等待可以制作更多靈活的引導(dǎo)型程序,非常實(shí)用厅克。

Happy coding :-)

我是@程序員小助手赔退,專注編程知識,圈子動態(tài)的IT領(lǐng)域原創(chuàng)作者

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末已骇,一起剝皮案震驚了整個濱河市离钝,隨后出現(xiàn)的幾起案子票编,更是在濱河造成了極大的恐慌,老刑警劉巖卵渴,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慧域,死亡現(xiàn)場離奇詭異,居然都是意外死亡浪读,警方通過查閱死者的電腦和手機(jī)昔榴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碘橘,“玉大人互订,你說我怎么就攤上這事《徊穑” “怎么了仰禽?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纺蛆。 經(jīng)常有香客問我吐葵,道長,這世上最難降的妖魔是什么桥氏? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任温峭,我火速辦了婚禮,結(jié)果婚禮上字支,老公的妹妹穿的比我還像新娘凤藏。我一直安慰自己,他們只是感情好堕伪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布揖庄。 她就那樣靜靜地躺著,像睡著了一般刃跛。 火紅的嫁衣襯著肌膚如雪抠艾。 梳的紋絲不亂的頭發(fā)上苛萎,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天桨昙,我揣著相機(jī)與錄音,去河邊找鬼腌歉。 笑死蛙酪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翘盖。 我是一名探鬼主播桂塞,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼馍驯!你這毒婦竟也來了阁危?” 一聲冷哼從身側(cè)響起玛痊,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狂打,沒想到半個月后擂煞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趴乡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年对省,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晾捏。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒿涎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惦辛,到底是詐尸還是另有隱情劳秋,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布胖齐,位于F島的核電站俗批,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏市怎。R本人自食惡果不足惜岁忘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望区匠。 院中可真熱鬧干像,春花似錦、人聲如沸驰弄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽戚篙。三九已至五鲫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岔擂,已是汗流浹背位喂。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乱灵,地道東北人塑崖。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像痛倚,于是被迫代替她去往敵國和親规婆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355