Artisan 開發(fā)

2018-12-17 11:00 更新

簡介

除了 Artisan 本身提供的命令之外,您也可以為您的應(yīng)用程序建立屬于你自己的命令。你可以將自定義命令存放在 app/Console/commands 目錄底下;然而,您也可以任意選擇存放位置,只要您的命令能夠被 composer.json 自動加載。

           

建立自定義命令

自動創(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/Commands/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

           

Would then allow for this command:

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

           

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

php artisan foo --option

           

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

當(dāng)您的自定義命令執(zhí)行時,您需要讓您的應(yīng)用程序可以訪問到這些參數(shù)和選項的值,要做到這一點(diǎn),您可以使用 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']);

           

           

注冊自定義命令

注冊一個 Artisan 命令

一旦你的自定義命令撰寫完成后,你需要將它注冊于 Artisan 它才能被使用。這通常位于 app/Console/Kernel.php 這個文件中。在此文件的 commands 屬性,你會找到一份命令的清單。若要注冊你的自定義命令,很簡單的你只要將它加入清單中。

protected $commands = [
    'App\Console\Commands\FooCommand'];

           

當(dāng) Artisan 啟動時,被列于此屬性中的所有命令都將被 服務(wù)容器 解析,并且被注冊于 Artisan 。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號