首頁 > 後端開發 > php教程 > 如何在 Laravel 中建立計劃任務?

如何在 Laravel 中建立計劃任務?

WBOY
發布: 2024-08-30 06:39:32
原創
495 人瀏覽過

大家好!今天,我將引導您完成在 Laravel 中建立排程任務的過程。我們將以向用戶發送每日行銷電子郵件為例。

第 1 步:建立電子郵件類

首先,讓我們使用以下 Artisan 指令建立一個新的 Mailable 類別:

php artisan make:mail DailyMarketingEmail --view
登入後複製

此指令在 App/Mail 目錄中產生一個新的 Mailable 類,並在 resources/views/mail/ 目錄中產生一個對應的視圖檔案 daily-marketing-email.blade.php。您可以在此檢視文件中自訂電子郵件的內容。

第 2 步:建立 Artisan 指令

接下來,我們將建立一個 Artisan 指令來處理傳送 DailyMarketingEmail。執行以下命令:

php artisan make:command SendDailyMarketingEmail
登入後複製

此指令將在 app/Console/Commands 目錄中產生一個新的指令類別。

第 3 步:了解命令結構

產生指令後,您將在產生的類別中看到兩個關鍵屬性:

protected $signature:這定義了 Artisan 指令的名稱和簽章。
protected $description:這提供了您的命令的描述。
此類別中的句柄方法是您定義命令邏輯的地方。

一切設定完畢後,您可以透過執行以下指令列出所有 Artisan 指令:

php 工匠

您應該在清單中看到您的命令:

How to create a scheduled Task in Laravel ?

第 4 步:實現命令邏輯

現在,讓我們在handle方法中定義發送行銷電子郵件的邏輯:

<?php

namespace App\Console\Commands;

use App\Models\User;
use Illuminate\Console\Command;
use App\Mail\DailyMarketingMail;
use Illuminate\Support\Facades\Mail;

class SendDailyMarketingEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:send-daily-marketing-emails';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send a marketing email to all users';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $users = User::get(); 

        $users->each(function ($user) {
            Mail::to($user->email)->send(new DailyMarketingEmail);
        });

    }
}
登入後複製

在handle方法中,我們從資料庫中檢索所有使用者並向每個使用者發送DailyMarketingEmail。

第 5 步:測試命令

您可以透過執行以下命令來手動測試命令:

php artisan app:send-daily-marketing-emails

登入後複製

考慮使用 Mailtrap 或 MailHog 等工具在測試期間擷取和檢視已傳送的電子郵件。

第 6 步:安排命令

最後,為了每天自動發送這封電子郵件,我們需要在 app/Console/ 目錄下的 Kernel.php 檔案的 Schedule 方法中安排命令:

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('app:send-daily-marketing-emails')->dailyAt('08:30'); 
    }

    /**
     * Register the commands for the application.
     */
    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}
登入後複製

在這裡,我們使用 dailyAt('08:30') 方法安排指令在每天上午 08:30 運行。您可以根據需要調整時間。

附加建議:

  1. 對電子郵件進行排隊:對於大量用戶來說,對電子郵件進行排隊而不是一次發送所有電子郵件是一個很好的做法。這可以透過在 Mailable 類別中實作 ShouldQueue 介面來完成。

  2. 效能注意事項:對於大型用戶群,請考慮最佳化資料庫查詢和電子郵件傳送過程,以確保高效的效能。

以上是如何在 Laravel 中建立計劃任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板