建立自定義命令

2018-02-24 15:53 更新

自動創(chuàng)建類(Class)

要創(chuàng)建一個新的自定義命令,您可以使用 make:console 這個 Artisan 命令,這將會自動產(chǎn)生一個 Command stub 協(xié)助您開始創(chuàng)建您的自定義命令:

自動創(chuàng)建一個新的命令類

php artisan make:console FooCommand

上面的命令將會協(xié)助你自動創(chuàng)建一個類,并保存為文件 app/Console/FooCommand.php。

在創(chuàng)建自定義命令時,加上 --command 這個選項,將可以指定之后在終端機(jī)使用此自定義命令時,所要輸入的自定義命令名稱:

php artisan make:console AssignUsers --command=users:assign

撰寫自定義命令

一旦你的自定義命令被創(chuàng)建后,你需要填寫自定義命令的 名稱(name)描述(description),您所填寫的內(nèi)容將會被顯示在 Artisan 的 list 畫面中。

當(dāng)您的自定義命令被執(zhí)行時,將會調(diào)用 fire 方法,您可以在此為自定義命令加入任何的邏輯判斷。

參數(shù)與選項

你可以通過 getArgumentsgetOptions 為自定義命令自行定義任何需要的參數(shù)與選項。這兩個方法都會返回一組命令數(shù)組,并由選項數(shù)組的清單所組成。

當(dāng)定義 arguments 時,該數(shù)組值的定義分別如下:

[$name, $mode, $description, $defaultValue]

參數(shù) mode 可以是下列其中一項: InputArgument::REQUIREDInputArgument::OPTIONAL。

當(dāng)定義 options 時,該數(shù)組值的定義分別如下:

[$name, $shortcut, $mode, $description, $defaultValue]

對選項而言,參數(shù) mode 可以是下列其中一項:InputOption::VALUE_REQUIRED, InputOption::VALUE_OPTIONAL, InputOption::VALUE_IS_ARRAY, InputOption::VALUE_NONE。

模式為 VALUE_IS_ARRAY 表示調(diào)用命令時可以多次使用此選項來傳入多個值:

InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY

這個命令將允許:

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

模式為 VALUE_NONE 則表示將此選項純粹作為一種有或無的「開關(guān)」使用:

php artisan foo --option

取得輸入值(參數(shù)與選項)

當(dāng)您的自定義命令執(zhí)行時,您需要讓您的應(yīng)用程序可以訪問到這些參數(shù)和選項的值,要做到這一點,您可以使用 argumentoption 方法:

取得自定義命令被輸入的參數(shù)

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

取得自定義命令被輸入的所有參數(shù)

$arguments = $this->argument();

取得自定義命令被輸入的選項

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

取得自定義命令被輸入的所有選項

$options = $this->option();

產(chǎn)生輸出

想要顯示信息到終端屏幕上,您可以使用 info、comment、questionerror 方法。每一種方法將會依據(jù)它所代表的目的,分別對應(yīng)一種適當(dāng)?shù)?ANSI 顏色。

顯示一般消息到終端屏幕

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

顯示錯誤消息到終端屏幕

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

詢問式輸入

您也可以使用 askconfirm 方法來提示用戶進(jìn)行輸入:

提示用戶進(jìn)行輸入

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

提示用戶進(jìn)行加密輸入

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

提示用戶進(jìn)行確認(rèn)

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

您也可以指定一個默認(rèn)值給 confirm 方法,可以是 truefalse

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

調(diào)用其它命令

有時候您可能希望在您的命令內(nèi)部調(diào)用其它命令,此時您可以使用 call 方法:

$this->call('command:name', ['argument' => 'foo', '--option' => 'bar']);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號