Artisan 命令行接口

2018-12-17 10:59 更新

介紹

Artisan 是 Laravel 內(nèi)置的命令行接口。它提供了一些有用的命令協(xié)助您開發(fā),它是由強(qiáng)大的 Symfony Console 組件所驅(qū)動。

           

用法

列出所有可用的命令

要查看所有可以使用的 Artisan 命令,你可以使用 list 命令:

php artisan list

           

瀏覽命令的幫助畫面

每個命令都包含一個顯示并描述這個命令能夠接受哪些參數(shù)和選項的「幫助畫面」。要瀏覽幫助畫面,只需要在命令名稱前面加上 help 即可:

php artisan help migrate

           

指定環(huán)境配置

您可以指定要使用的環(huán)境配置,只要在執(zhí)行命令時加上 --env 即可切換:

php artisan migrate --env=local

           

顯示目前的 Laravel 版本

你也可以使用 --version 選項,查看目前安裝的 Laravel 版本:

php artisan --version

           

           

在命令行接口以外的地方調(diào)用命令

有時你會希望在命令行接口以外的地方執(zhí)行 Artisan 命令。例如,你可能會希望從 HTTP 路由調(diào)用 Artisan 命令。只要使用 Artisan facade 即可:

Route::get('/foo', function(){
    $exitCode = Artisan::call('command:name', ['--option' => 'foo']);

    //});

           

你甚至可以把 Artisan 命令放到隊列,他們會通過 隊列工作者 在后臺執(zhí)行:

Route::get('/foo', function(){
    Artisan::queue('command:name', ['--option' => 'foo']);

    //});

           

           

定時調(diào)用 Artisan 命令

過去,開發(fā)者會對每個他們想要調(diào)用的命令行指令建立 Cron 對象。然而,這很令人頭痛。你的命令行指令調(diào)用不再包含在版本控制里面,并且你必須 SSH 進(jìn)入你的服務(wù)器以添加 Cron 對象。讓我們來讓生活變得更輕松。Laravel 命令調(diào)用器允許你順暢地且語義化地定義命令調(diào)用在 Laravel 里面,而且你的服務(wù)器只需要一個 Cron 對象。

你的命令調(diào)用保存在 app/Console/Kernel.php 文件。你會在這個類里看到一個 schedule 方法。為了幫助您開始,方法里面包含一個簡單的例子。你可以依照你需要的自由地添加任何數(shù)量的預(yù)定工作到 Schedule 對象。你只需要添加這個 Cron 對象到服務(wù)器:

* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

           

這個 Cron 將會每分鐘調(diào)用 Laravel 命令調(diào)用器。接著,Laravel 評估你的預(yù)定工作并在時間到時執(zhí)行工作。這不能再更簡單了!

更多調(diào)用的例子

讓我們來多看幾個調(diào)用的例子:

調(diào)用閉包

$schedule->call(function(){
    // 執(zhí)行一些任務(wù)...})->hourly();

           

調(diào)用終端機(jī)命令

$schedule->exec('composer self-update')->daily();

           

自己配置 Cron 表達(dá)式

$schedule->command('foo')->cron('* * * * *');

           

頻繁的工作

$schedule->command('foo')->everyFiveMinutes();$schedule->command('foo')->everyTenMinutes();$schedule->command('foo')->everyThirtyMinutes();

           

每天一次的工作

$schedule->command('foo')->daily();

           

每天一次在特定時間 (24 小時制) 的工作

$schedule->command('foo')->dailyAt('15:00');

           

每天兩次的工作

$schedule->command('foo')->twiceDaily();

           

每個工作日執(zhí)行的工作

$schedule->command('foo')->weekdays();

           

每周一次的工作

$schedule->command('foo')->weekly();// 調(diào)用每周一次在特定的日子 (0-6) 和時間的工作...$schedule->command('foo')->weeklyOn(1, '8:00');

           

每月一次的工作

$schedule->command('foo')->monthly();

           

特定日期的工作

$schedule->command('foo')->mondays();$schedule->command('foo')->tuesdays();$schedule->command('foo')->wednesdays();$schedule->command('foo')->thursdays();$schedule->command('foo')->fridays();$schedule->command('foo')->saturdays();$schedule->command('foo')->sundays();

           

Prevent Jobs From Overlapping

防止工作重疊

默認(rèn)情況下,即使前一個工作實例正在運(yùn)行中,被調(diào)用的工作也會同時被執(zhí)行。如果要避免這件事情,你可以使用 withoutOverlapping 方法:

$schedule->command('foo')->withoutOverlapping();

           

在這個例子中,foo 命令每分鐘都會被執(zhí)行,除非他正在運(yùn)行中。

限制應(yīng)該執(zhí)行工作的環(huán)境

$schedule->command('foo')->monthly()->environments('production');

           

指定工作在當(dāng)應(yīng)用程序處于維護(hù)模式也應(yīng)該執(zhí)行

$schedule->command('foo')->monthly()->evenInMaintenanceMode();

           

只允許工作在閉包返回 true 的時候執(zhí)行

$schedule->command('foo')->monthly()->when(function(){
    return true;});

           

將預(yù)定工作的輸出發(fā)送到指定的 E-mail

$schedule->command('foo')->sendOutputTo($filePath)->emailOutputTo('foo@example.com');

           

注意: 你必須先把輸出存到文件中才可以發(fā)送 email。

將預(yù)定工作的輸出發(fā)送到指定的路徑

$schedule->command('foo')->sendOutputTo($filePath);

           

在預(yù)定工作執(zhí)行之后 Ping 一個給定的 URL

$schedule->command('foo')->thenPing($url);

           

使用 thenPing($url) 功能則必須引入 Guzzle HTTP 庫。你能夠通過添加下面這行代碼至你的 composer.json 文件來添加 Guzzle 5 到你的項目中:

"guzzlehttp/guzzle": "~5.0"


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號