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

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

Totem 是用來新增與管理 Laravel Schedule 的套件,提供一個方便的主控台介面,讓追蹤與管理排程變得更為簡單

你可以在這裡有個表單方便去設定新任務所需要設定的內容,比如要執行的命令,要執行的頻率等等,另外還可以設定當任務執行時發個信件來通知你。除此之外,也有介面能夠讓你去追蹤任務的執行歷程,非常的方便

如果你不了解 Laravel 排程(Schedule) 是如何運作的,建議你先看看這篇文章唷Schedule任務排程攻略

先來看一下這個套件的主控台介面

Laravel Totem 主控台

這個套件並沒有支援本地化,這個介面的中文化是我自己透過覆寫機制來改出來的。為了方便複寫,我為這個套件寫了一個中文化套件,在文章的最後會告訴你該如何取得我的套件來進行 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....');
    }
}

使用方法

這是任務清單的介面,除了可建立新任務外,還可以把既有的任務清單做個匯出,又或者是匯入先前匯出的任務清單

Laravel totem 介面說明

介面中文化

接著,再來為大家介紹如何進行 Totem 套件的本地化。我們能做的就是透過視圖的覆寫機制以及修改 totem 設定檔

因為要改的視圖檔較多,設定也不少,因此我為大家做了一個簡單的本地化套件,下面為大家說明該如何使用

請先確保已經完成上面的所有 Totem 安裝流程

Step 1.下載 Totem 中文化套件

開啟 Terminal ,輸入以下指令

composer require javck/totemzh

Step 2.發布 Totem的中文化資源檔

開啟 Terminal ,輸入以下指令

php artisan vendor:publish --provider="Javck\Totemzh\TotemzhServiceProvider" --force

分享這篇文章:

訂閱電子報,索取 Laravel 學習手冊

價值超過 3000 元,包含常用 Laravel 語法與指令!

一小時免費求職講座

3個應徵軟體工程師前該知道的秘訣

取得免費課程連結

Laravel 百萬年薪特訓營

從最基礎的 PHP 語法開始,包含所有你該知道的網頁基礎知識,連同 Laravel 從零開始一直到實戰,最後還將告訴你如何找好工作,讓你及早擁有百萬年薪