回到最上方

文件

開發

介紹

除了 Artisan 提供的指令外,你也可以在你的應用程式中建立自訂的 Artisan 指令,你可以將你的自訂指令存放在 app/commands 目錄中,然而,只要 composer.json 檔案中的 "自動載入 (autoload)" 的部分有設定好,你也可以依照你的喜好放置自訂指令到不同的目錄下。

建立指令

產生類別

你可以在 Artisan 指令中使用 command:make 指令,讓你可以產生製作新指令的初始程式框架:

產生新的 Artisan 指令類別

php artisan command:make FooCommand

預設產生的 Artisan 指令類別檔案會存放在 app/commands 目錄下,你也可以指定自訂的 "路徑 (path)" 或 "命名空間 (namespace)":

php artisan command:make FooCommand --path="app/classes" --namespace="Classes"

撰寫 Artisan 指令

在 Artisan 命令類別寫好後,你應該要替類別加上 namedescription 屬性,這些屬性資訊會在 命令清單 (list) 畫面中顯示。

fire 方法會在執行命令後被呼叫執行,你可以在 fire 方法中撰寫任何的指令處理邏輯。

參數 & 選項

可以透過 getArgumentsgetOptions 方法去取得任何你自訂的參數及選項,這兩個方法皆會回傳在 命令清單 (list) 畫面中顯示指令的陣列資料。

在定義 參數 (arguments) 時,定義參數值的陣列資料會呈現如下所示:

array($name, $mode, $description, $defaultValue)

參數 mode 可以是 InputArgument::REQUIREDInputArgument::OPTIONAL 中的其中任何一個。

在定義 選項 (options) 時,定義選項值的陣列資料會呈現如下所示:

array($name, $shortcut, $mode, $description, $defaultValue)

對於 "選項 (options)" 來說,參數 mode 可以是 InputOption::VALUE_REQUIREDInputOption::VALUE_OPTIONALInputOption::VALUE_IS_ARRAYInputOption::VALUE_NONE 中的其中任何一個。

VALUE_IS_ARRAY 模式指的是,在呼叫指令時,該選項數值可以傳入多次:

php artisan foo --option=bar --option=baz

VALUE_NONE 模式指的是該選項僅用來做 "切換 (switch)" 使用,不帶任何資料:

php artisan foo --option

取得輸入的資料

當指令執行時,你的應用程式想必一定需要去接收參數及選項,你可以使用 argumentoption 方法去接收參數及選項的資料:

取得命令中指定的參數值

$value = $this->argument('name');

取得所有參數值

$arguments = $this->argument();

取得命令中指定的選項值

$value = $this->option('name');

取得所有選項值

$options = $this->option();

撰寫輸出

你可以使用 infocommentquestionerror 方法去輸出資料到命令列 (console),這些方法會使用符合其用途的 ANSI 顏色的字做輸出。

傳送 "資訊 (info)" 到命令列

$this->info('Display this on the screen');

傳送 "錯誤 (error)" 訊息到命令列

$this->error('Something went wrong!');

詢問問題

你可以使用 askconfirm 方法去提示使用者輸入資料:

詢問使用者請求輸入資料

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

詢問使用者請求輸入隱藏資料

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

詢問使用者做資訊確認

if ($this->confirm('Do you wish to continue? [yes|no]'))
{
    //
}

你也可以指定預設值到 confirm 方法中,預設值必須為 truefalse:

$this->confirm($question, true);

註冊指令

在你完成自訂 Artisan 指令後,你需要使用 Artisan 指令進行指令的註冊,這樣才能被使用,這個通常是在 app/start/artisan.php 檔案中完成,在這個檔案中,你可以使用 Artisan::add 方法去註冊指令:

註冊 Artisan 指令

Artisan::add(new CustomCommand);

如果你的命令是在應用程式中的 IoC容器 中註冊,你可以使用 Artisan::resolve 方法,讓 Artisan 可以使用該方法:

註冊在 IoC 容器的指令

Artisan::resolve('binding.name');

呼叫其他指令

有時你可能會需要呼叫其他的指令,你可以使用 call 方法去呼叫執行其他的指令:

呼叫其他指令

$this->call('command.name', array('argument' => 'foo', '--option' => 'bar'));

討論