protected $signature = 'make:migration {name : The name of the migration}
{--create= : The table to be created}
{--table= : The table to migrate}
{--path= : The location where the migration file should be created}
{--realpath : Indicate any provided migration file paths are pre-resolved absolute paths}';
參數(shù):必填翎猛、可選和默認(rèn)參數(shù)
要定義一個必填參數(shù)胖翰,需要用花括號將其包裹起來:
make:migration {name}
要定義一個可選參數(shù),可以在參數(shù)名稱后面加一個問號:
make:migration {name?}
要為可選參數(shù)定義默認(rèn)值切厘,可以這么做:
make:migration {name=create_users_table}
選項:必須設(shè)值萨咳、默認(rèn)值以及縮寫
選項和參數(shù)很像,但是選項有前綴 --疫稿,而且可以在沒有值的情況下使用培他,要添加一個最基本的選項,可以通過花括號將其包裹:
make:migration {name} {--table}
如果這個選項必須要設(shè)置選項值遗座,可以加上一個 =:
make:migration {name} {--table=}
然后如果你想要為其設(shè)置默認(rèn)選項值舀凛,可以這么做:
make:migration {name} {--table=users}
此外,選項還支持縮寫途蒋,比如我們可以通過 T 來代表 table:
make:migration {name} {--T|table}
數(shù)組參數(shù)和數(shù)組選項
不管是參數(shù)還是選項猛遍,如果你想要接收數(shù)組作為參數(shù),都要使用 * 通配符:
make:migration {name*} {--table=*}
數(shù)組參數(shù)和選項的調(diào)用方式如下(這里僅作演示号坡,make:migration 本身不支持這么干):
make:migration create_users_table create_posts_table --table=users --table=posts
注:數(shù)組參數(shù)必須是參數(shù)列表中的最后一個參數(shù)懊烤。
獲取參數(shù)和選項
接下來,我們需要在命令類中獲取參數(shù)和選項信息宽堆,在此之前腌紧,根據(jù)上述知識點,我們改寫下自定義的 welcome:message 命令的 $signature 屬性:
protected $signature = 'welcome:message {name : 用戶名} {--city : 來自的城市}';
獲取參數(shù)和選項
接下來畜隶,我們需要在命令類中獲取參數(shù)和選項信息壁肋,在此之前逮光,根據(jù)上述知識點,我們改寫下自定義的 welcome:message 命令的 $signature 屬性:
protected $signature = 'welcome:message {name : 用戶名} {--city : 來自的城市}';
在命令類中我們可以通過 this->option() 方法獲取選項值,不帶參數(shù)返回所有選項值察净,傳入指定選項名返回對應(yīng)的選項值驾茴。為此,我們改寫 welcome:message 命令的 handle() 方法如下:
public function handle()
{
$this->info('歡迎來自' . $this->option('city') . '的' . $this->argument('name') .'xxx!');
}
用戶交互
除了在命令行運行命令時手動設(shè)置參數(shù)值和選項值獲取輸入信息之外氢卡,Artisan 還支持通過其它方式獲取用戶輸入锈至,比如用戶在執(zhí)行命令期間通過鍵盤輸入?yún)?shù)信息。這在我們的命令行應(yīng)用最終是交付給客戶使用的情況下非常方便译秦,因為不同客戶的輸入信息是不一樣的峡捡,我們不能寫死,如果讓客戶自己輸入又長又多的參數(shù)和選項又很不友好筑悴。
Laravel Artisan 提供了很多方法支持用戶輸入不同類型的數(shù)據(jù)们拙。
如果輸入的是普通文本的話,通過 ask() 方法即可:
$name = $this->ask('你叫什么的名字');
如果輸入的是敏感信息阁吝,比如密碼之類的砚婆,可以通過 secret() 方法隱藏用戶輸入:
$password = $this->secret('輸入密碼才能執(zhí)行此命令');
如果需要用戶確認(rèn)信息,可以通過 confirm() 方法突勇,該方法返回布爾值:
if ($this->confirm('確定要執(zhí)行此命令嗎?')) {
// 繼續(xù)
}
有時候装盯,我們?yōu)榱朔奖阌脩艨焖佥斎耄瑫峁┳詣油瓿商崾竟δ芗撞觯@可以通過 anticipate() 方法實現(xiàn):
$city = $this->anticipate('你來自哪個城市', [
"北京",
"杭州",
"深圳"
]);
最后埂奈,還有個很常見的命令行交互方式是為用戶提供選項讓用戶選擇,這可以通過 choice() 方法實現(xiàn):
$city = $this->choice('你來自哪個城市', [
'北京', '杭州', '深圳'
], 0);
進(jìn)度條
如果你之前運行過 npm install摔刁,就會看到安裝過程中有進(jìn)度條顯示安裝進(jìn)度挥转,在 Artisan 命令執(zhí)行過程中海蔽,也可以顯示類似的進(jìn)度條共屈,實現(xiàn)代碼如下:
$totalUnits = 10;
$this->output->progressStart($totalUnits);
$i = 0;
while ($i++ < $totalUnits) {
sleep(3);
$this->output->progressAdvance();
}