Laravel Schedule 管理介面生成套件介紹

Totem 是用來新增與管理 Laravel Schedule 的套件,提供一個方便的主控台介面,讓追蹤與管理排程變得更為簡單
你可以在這裡有個表單方便去設定新任務所需要設定的內容,比如要執行的命令,要執行的頻率等等,另外還可以設定當任務執行時發個信件來通知你。除此之外,也有介面能夠讓你去追蹤任務的執行歷程,非常的方便
如果你不了解 Laravel 排程(Schedule) 是如何運作的,建議你先看看這篇文章唷Schedule任務排程攻略
先來看一下這個套件的主控台介面
這個套件並沒有支援本地化,這個介面的中文化是我自己透過覆寫機制來改出來的。為了方便複寫,我為這個套件寫了一個中文化套件,在文章的最後會告訴你該如何取得我的套件來進行 Totem 套件的中文化
安裝套件
首先我們先來聊聊該如何去安裝套件
Step 1. 下載套件
開啟 Terminal ,輸入以下指令
composer require studio/laravel-totem
Step 2.建立 Laravel Totem 所需要的表格
PS:如果你有用到名為 tasks 的表格,建議你為 Totem 的表格名稱建立前綴
做法是在 .env 檔案裡頭加上這個設定
TOTEM_TABLE_PREFIX="totem_"
開啟 Terminal ,輸入以下指令來執行 Migrate
php artisan migrate
Step 3.發布 Totem 的素材檔案到你的 public 資料夾內
開啟 Terminal ,輸入以下指令
php artisan totem:assets
Step 4.發布 Totem 的所有資源檔
開啟 Terminal,輸入以下指令
php artisan vendor:publish --provider="Studio\Totem\Providers\TotemServiceProvider"
設定套件
需完成驗證才能訪問任務主控台
編輯 app/Providers/AppServiceProvider.php ,內容如下:
//app\Providers\AppServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Studio\Totem\Totem;
use Auth;
public function boot(){
Totem::auth(function($request) {
// return true / false . For e.g.
return Auth::check();
});
}
Filter 命令選單
預設 Totem 套件會輸出所有的 Artisan 命令到任務的新增/編輯介面。如果你希望過濾命令清單只顯示部分命令的話,你可以透過 filter 這個設定功能,它位於 totem.php
設定檔內
範例 filter 設定
//config\totem.php
'artisan' => [
'command_filter' => [
'stats:*',
'email:daily-reports'
],
],
這個功能使用 fnmatch
語法來過濾要顯示的命令。 stats:*
代表命令須符合由 stats:
開頭,而 email:daily-reports
則只符合名稱完全相同的命令
這個語法能夠用來做為白名單又或者是黑名單。預設情況下是作為白名單但你可以透過 whitelist
設定來轉為黑名單,如下設定範例
//config\totem.php
'artisan' => [
'command_filter' => [
'stats:*',
'email:daily-reports'
],
'whitelist' => false, //作為黑名單
]
中介層
Laravel Totem 使用預設的 web 和 api 中介層,但如果需自定義的話可以在 .env 設定 TOTEM_WEB_MIDDLEWARE 和 TOTEM_API_MIDDLEWARE 這兩個參數
'web' => [
'middleware' => env('TOTEM_WEB_MIDDLEWARE', 'web'),
'route_prefix' => env('TOTEM_WEB_ROUTE_PREFIX', 'totem'),
],
'api' => [
'middleware' => env('TOTEM_API_MIDDLEWARE', 'api'),
],
路由
目前 Totem 套件所有預設路由前綴為 totem ,如果你想要更換為其他的前綴,比如 goblin ,你可以在 .env 加入以下設定
TOTEM_WEB_ROUTE_PREFIX="javck"
其他
如果你想要在終端機上面顯示 Schedule 列表,可以使用以下指令
php artisan schedule:list
Totem 有建立一個機制,可以在任務執行時以 Email . SMS(簡訊) 或 slack 等方式來通知你。這幾個以 Email 最為適合我們使用。如果要啟用 Email 發送,除了在任務建立時去指定要收信的 Email 以外,也需要到 .env 設定檔去設定發信伺服器
//.env
MAIL_MAILER=smtp
MAIL_HOST={你的Mail Host}
MAIL_PORT={Mail Port}
MAIL_USERNAME={帳號}
MAIL_PASSWORD={密碼}
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS={Mail Address}
MAIL_FROM_NAME="${APP_NAME}"
實作說明
前置準備
使用 Schedule 功能前需要把該 Laravel 專案加入 CronJob,所謂的 Cron 指的是時間一到就會執行的機制,要實作 Schedule,就必須搭配 Cron。以下是加入做法
在Mac & Linux 上面的操作
crontab -e
接著 Terminal 將會切換到 Vim 介面,按下 i 來進入 Vim 的編輯模式,加入底下這一行
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
請把 /path-to-your-project
替換成你本地專案的路徑
這一行是在告訴電腦每分鐘都到這個專案目錄,執行php artisan schedule:run 這個指令,也就是處理排程工作的意思
貼完之後,按下esc鍵,接著輸入:wq,來離開vim的模式並進行儲存, 當你看到下面這個結果就表示你成功了啦
crontab: installing new crontab
如需確認是否成功,也可以輸入以下這個指令
crontab -l
順利的話,你應該會看到剛才所貼上的內容,就表示成功了
定義一個測試用命令
為了要執行排程,先把要作的事情封裝成一個命令是比較好的作法,也方便重用,這裡我們看看可以如何快速生成一個測試用命令
開啟Terminal ,輸入以下指令
php artisan make:command LogReport
這個命令將會在 app/Console/Commands 資料夾內建立 LogReport.php,編輯檔案如下:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Log;
class ServerReport extends Command
{
/**
* 命令的名稱,用於呼叫命令.
*
* @var string
*/
protected $signature = 'test:report';
/**
* 命令的描述,用於列表顯示
*
* @var string
*/
protected $description = 'server report...';
public function __construct()
{
parent::__construct();
}
/**
* 命令的作業區.
*
* @return int
*/
public function handle()
{
info('log....');
}
}
使用方法
這是任務清單的介面,除了可建立新任務外,還可以把既有的任務清單做個匯出,又或者是匯入先前匯出的任務清單
介面中文化
接著,再來為大家介紹如何進行 Totem 套件的本地化。我們能做的就是透過視圖的覆寫機制以及修改 totem 設定檔
因為要改的視圖檔較多,設定也不少,因此我為大家做了一個簡單的本地化套件,下面為大家說明該如何使用
請先確保已經完成上面的所有 Totem 安裝流程
Step 1.下載 Totem 中文化套件
開啟 Terminal ,輸入以下指令
composer require javck/totemzh
Step 2.發布 Totem的中文化資源檔
開啟 Terminal ,輸入以下指令
php artisan vendor:publish --provider="Javck\Totemzh\TotemzhServiceProvider" --force