前面理解了使用commands 的方法,這邊就來看看如何編輯自己command的方法,以及讓自己的command變得更有風格。
//取得單一 user 參數
$this->argument('user');
//取得所有參數,會以array呈現
$this->arguments();
//取得單一 queue 選項
$this->option('queue');
//取得所有選項,會以array呈現
$this->options();
這邊拿官網的範例直接說明就會很直覺可以理解
$name = $this->ask('What is your name?');
$password = $this->secret('What is the password?');
if ($this->confirm('Do you wish to continue?')) {
//
}
$this->anticipate('What is your name?', ['Taylor', 'Dayle']);
$name = $this->choice('What is your name?', ['Sunny', 'Taylor', 'Dayle'], $defaultIndex);
What is your name? [Taylor]: //在這個$defaultIndex = 1
[0] Sunny
[1] Taylor
[2] Dayle
> 0
Display name: Sunny
接下來這些指令也會出現在終端機畫面上,但是會有顏色表示 line, info, comment, question, error
甚至可以呈現table 與進度條
5.5 版以後只要在app/Console/Commands目錄底下
,註冊commands的動作基本上不用特別處理,因為繼承的關係laravel直接有處理了
可以看到 App\Console\Kernel.php
裡面的load method
protected function commands()
{
$this->load(__DIR__.'/Commands');
//如果還有在其他資料夾底下的command可以用load註冊
$this->load(__DIR__.'/MoreCommands');
// ...
}
call
method: 一般在程式中呼叫queue
method: 隊列背景執行範例:
Route::get('/foo', function () {
$exitCode = Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]);
// using queue
/*Artisan::queue('email:send', [
'user' => 1,
'--queue' => 'default' //也可以指定接收array, boolean
]);*/
});
一樣是用call
methods,但是可以用callSilent
忽視其他指令的所有輸出
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]);
/*
$this->callSilent('email:send', [
'user' => 1, '--queue' => 'default'
]);*/
}
php artisan tinker 這個指令是一個讓你可以跟laravel應用程式在command line互動的指令,會在之後的章節跟factory, seed 一起介紹。
結論: laravel 幫自己的command 提供很豐富的用法,從最單純的直接下一行指令執行,到互動式指令,或是直接在程式裡面呼叫,可以讓開發者視情況做最適合的使用方式,算是他的一個特色。
參考連結: