iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 21
0
Software Development

30天快速上手Laravel系列 第 21

Day21-[Laravel 資料夾目錄與內容] Artisan command 詳細介紹

  • 分享至 

  • xImage
  •  

前面理解了使用commands 的方法,這邊就來看看如何編輯自己command的方法,以及讓自己的command變得更有風格。

取得輸入

//取得單一 user 參數
$this->argument('user');
//取得所有參數,會以array呈現
$this->arguments();
//取得單一 queue 選項
$this->option('queue');
//取得所有選項,會以array呈現
$this->options();

互動式指令

這邊拿官網的範例直接說明就會很直覺可以理解

  • ask: 詢問
$name = $this->ask('What is your name?');
  • secret: 一樣是詢問,但是回答在終端機會看不到
$password = $this->secret('What is the password?');
  • confirm: 確認問題,預設回傳值是false,如果使用者回傳y或是yes 則會回傳true
if ($this->confirm('Do you wish to continue?')) {
    //
}
  • anticipate: 自動完成,這樣如果是Taylor 或是Dayle 這兩個選項就會自動完成,當然使用者還可以輸入其他選項
$this->anticipate('What is your name?', ['Taylor', 'Dayle']);
  • choice: 選項選擇,使用者會輸入key
$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 與進度條

註冊commands

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 提供很豐富的用法,從最單純的直接下一行指令執行,到互動式指令,或是直接在程式裡面呼叫,可以讓開發者視情況做最適合的使用方式,算是他的一個特色。

參考連結:


上一篇
Day20-[Laravel 資料夾目錄與內容] Artisan command 初探
下一篇
Day22-[DB 操作] Seeds
系列文
30天快速上手Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言