ホームページ >バックエンド開発 >PHPチュートリアル >Laravelでスケジュールされたタスクを作成するにはどうすればよいですか?
皆さん、こんにちは!今日は、Laravel でスケジュールされたタスクを作成するプロセスを説明します。ユーザーに毎日マーケティングメールを送信する例を取り上げます。
まず、次の Artisan コマンドを使用して、新しい Mailable クラスを作成しましょう:
php artisan make:mail DailyMarketingEmail --view
このコマンドは、App/Mail ディレクトリに新しい Mailable クラスを生成し、対応するビュー ファイル、daily-marketing-email.blade.php を resource/views/mail/ ディレクトリ内に生成します。このビュー ファイル内で電子メールの内容をカスタマイズできます。
次に、DailyMarketingEmail の送信を処理する Artisan コマンドを作成します。次のコマンドを実行します:
php artisan make:command SendDailyMarketingEmail
このコマンドは、app/Console/Commands ディレクトリに新しいコマンド クラスを生成します。
コマンドを生成すると、生成されたクラスに 2 つの主要なプロパティが表示されます。
protected $signature: これは、Artisan コマンドの名前と署名を定義します。
protected $description: コマンドの説明を提供します。
このクラスのハンドル メソッドは、コマンドのロジックを定義する場所です。
すべてのセットアップが完了したら、次のコマンドを実行してすべての Artisan コマンドをリストできます。
php職人
リストにコマンドが表示されるはずです:
次に、マーケティング電子メールを送信するためのハンドル メソッド内でロジックを定義しましょう。
<?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 を送信します。
次を実行してコマンドを手動でテストできます。
php artisan app:send-daily-marketing-emails
テスト中に送信されたメールをキャッチして表示するには、Mailtrap や MailHog などのツールの使用を検討してください。
最後に、この電子メールの毎日の送信を自動化するには、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 分にコマンドが実行されるようにスケジュールします。必要に応じて時間を調整できます。
電子メールのキューイング: 多数のユーザーの場合、電子メールを一度にすべて送信するのではなく、キューに入れることをお勧めします。これは、Mailable クラスに ShouldQueue インターフェイスを実装することで実行できます。
パフォーマンスに関する考慮事項: ユーザー ベースが大きい場合は、データベース クエリと電子メール送信プロセスを最適化して、効率的なパフォーマンスを確保することを検討してください。
以上がLaravelでスケジュールされたタスクを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。