引言
上一期我們介紹了laravel命令行的創建,以及使用方法。使用了一個沒有數據輸入和輸出的測試用例。 本期我們來介紹帶有命令行參數輸入,和命令行輸出信息的代碼用法。
代碼時間
聲明命令行位置參數,在類文件內$signature變量內書寫:
protected $signature = 'password:reset {userId} {--sendEmail}';
其中 userId是必填參數,需要填入一個數據;而 sendEmail 則是一個開關, 如果在命令行中帶有 --sendEmail 則返回true,否則返回默認值。
對於常用的位置參數,如果想要對 userId設置為可選,這樣寫:
password:reset {userId?}
如果要給其設置一個默認值,這樣來寫:
password:reset {userId=1}
對於可選項(比如 --password) 需要用戶手動輸入一個值,這樣寫:
password:reset {userId} {--password=}
加一個等號即可。如果可選項有默認值,等號傳遞上即可:
password:reset {userId} {--queue=default}
如果要使用一個命令行參數,接收一系列值,也就是一個數組,這樣來聲明:
password:reset {userIds*}
用的使用需要使用空格將各個參數排開:
php artisan password:reset 1 2 3
如果是可選項參數,則聲明如下:
password:reset {--ids=*}
使用起來的時候,比較人性化,我們推薦這種用法,也是linux作業系統下的慣例:
php artisan password:reset --ids=1 --ids=2 --ids=3
這樣要直觀的多。
演示示例
假設命令行文件內聲明的參數類型如下:
password:reset {userId}
那麼在程序內要獲取命令行的該參數,需要$this->argument()方法,返回的是一個數組:
["command": "password:reset", "userId': "5",]
獲取單個參數的值:
$userId = $this->argument('userId');
對於可選項的值,文件內聲明如下:
password:reset {--userId=}
首選我們列印多有的可選項$this->option()數據:
["userId" => "5" "help" => false "quiet" => false "verbose" => false "version" => false "ansi" => false "no-ansi" => false "no-interaction" => false "env" => null]
如果是獲取單個可選項參數,在方法內指定即可:
$userId = $this->option('userId');
寫在最後
本文使用對比的方式,為大家演示了命令行的argument和option的區別, 在用法上我們更推薦使用 option獲取用戶輸入,這樣更符合linux的設計哲學和慣例。
Happy coding :-)
我是@程式設計師小助手,持續分享編程知識,歡迎關注。