ホームページ >バックエンド開発 >PHPチュートリアル >Laravelでスケジュールされたタスクを作成するにはどうすればよいですか?

Laravelでスケジュールされたタスクを作成するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-08-30 06:39:32503ブラウズ

皆さん、こんにちは!今日は、Laravel でスケジュールされたタスクを作成するプロセスを説明します。ユーザーに毎日マーケティングメールを送信する例を取り上げます。

ステップ 1: 電子メール クラスを作成する

まず、次の Artisan コマンドを使用して、新しい Mailable クラスを作成しましょう:

php artisan make:mail DailyMarketingEmail --view

このコマンドは、App/Mail ディレクトリに新しい Mailable クラスを生成し、対応するビュー ファイル、daily-marketing-email.blade.php を resource/views/mail/ ディレクトリ内に生成します。このビュー ファイル内で電子メールの内容をカスタマイズできます。

ステップ 2: アーティザン コマンドを作成する

次に、DailyMarketingEmail の送信を処理する Artisan コマンドを作成します。次のコマンドを実行します:

php artisan make:command SendDailyMarketingEmail

このコマンドは、app/Console/Commands ディレクトリに新しいコマンド クラスを生成します。

ステップ 3: コマンド構造を理解する

コマンドを生成すると、生成されたクラスに 2 つの主要なプロパティが表示されます。

protected $signature: これは、Artisan コマンドの名前と署名を定義します。
protected $description: コマンドの説明を提供します。
このクラスのハンドル メソッドは、コマンドのロジックを定義する場所です。

すべてのセットアップが完了したら、次のコマンドを実行してすべての Artisan コマンドをリストできます。

php職人

リストにコマンドが表示されるはずです:

How to create a scheduled Task in Laravel ?

ステップ 4: コマンド ロジックを実装する

次に、マーケティング電子メールを送信するためのハンドル メソッド内でロジックを定義しましょう。

<?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);
        });

    }
}

ハンドル メソッドでは、データベースからすべてのユーザーを取得し、各ユーザーに DailyMarketingEmail を送信します。

ステップ 5: コマンドのテスト

次を実行してコマンドを手動でテストできます。

php artisan app:send-daily-marketing-emails

テスト中に送信されたメールをキャッチして表示するには、Mailtrap や MailHog などのツールの使用を検討してください。

ステップ 6: コマンドのスケジュールを設定する

最後に、この電子メールの毎日の送信を自動化するには、app/Console/ ディレクトリにある Kernel.php ファイルのスケジュール メソッドでコマンドをスケジュールする必要があります。

<?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') メソッドを使用して、毎日午前 8 時 30 分にコマンドが実行されるようにスケジュールします。必要に応じて時間を調整できます。

追加の提案:

  1. 電子メールのキューイング: 多数のユーザーの場合、電子メールを一度にすべて送信するのではなく、キューに入れることをお勧めします。これは、Mailable クラスに ShouldQueue インターフェイスを実装することで実行できます。

  2. パフォーマンスに関する考慮事項: ユーザー ベースが大きい場合は、データベース クエリと電子メール送信プロセスを最適化して、効率的なパフォーマンスを確保することを検討してください。

以上がLaravelでスケジュールされたタスクを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。