」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Laravel 中建立計劃任務?

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

發佈於2024-11-03
瀏覽:599

大家好!今天,我將引導您完成在 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方法中定義發送行銷電子郵件的邏輯:

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 方法中安排命令:

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. 效能注意事項:對於大型用戶群,請考慮優化資料庫查詢和電子郵件發送流程,以確保高效的效能。

版本聲明 本文轉載於:https://dev.to/kepsondiaz/how-to-create-a-scheduled-task-in-laravel--54a0?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 將圖片浮動到底部右側並環繞文字的技巧
    將圖片浮動到底部右側並環繞文字的技巧
    在Web設計中圍繞在Web設計中,有時可以將圖像浮動到頁面右下角,從而使文本圍繞它纏繞。這可以在有效地展示圖像的同時創建一個吸引人的視覺效果。 css位置在右下角,使用css float and clear properties: img { 浮點:對; ...
    程式設計 發佈於2025-04-21
  • 在Go語言中,`defer`語句後使用`()`的原因及作用
    在Go語言中,`defer`語句後使用`()`的原因及作用
    在go 考慮示例:嘗試遞延函數f本身,這是沒有意義的。相反,正確的語法為: defer f(),此構建一個閉合,在激活defer語句時捕獲當前上下文並執行函數f。外括號立即執行閉合,以確保在執行延期語句之後進行函數調用。 defer func(n int) { fmt.Println(n) }(i...
    程式設計 發佈於2025-04-21
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-04-21
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-04-21
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-04-21
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-04-21
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-21
  • 手動觸發桌面應用中的繪圖事件方法
    手動觸發桌面應用中的繪圖事件方法
    [2 [2 油漆事件對於更新桌面應用程序中的圖形用戶界面(GUI)至關重要。 當動態更改面板上的文本之類的元素時,您需要手動觸發重新粉刷以反映這些更改。本文詳細介紹瞭如何完成此操作。 用於手動重新啟動表格或控制類中的幾種方法允許您強制重新塗抹: :此方法計劃對控件進行重新塗漆。實際的重新繪製稍後...
    程式設計 發佈於2025-04-21
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, attributeError:SomeClass實...
    程式設計 發佈於2025-04-21
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-04-21
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-04-21
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-04-21
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-21
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-04-21
  • Go語言結構體深度解析
    Go語言結構體深度解析
    In Go, struct is an aggregate type used for defining and encapsulating data. It allows combining fields of different types. Structs can be seen as cus...
    程式設計 發佈於2025-04-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3