大家好!今天,我将引导您完成在 Laravel 中创建计划任务的过程。我们将以向用户发送每日营销电子邮件为例。
首先,让我们使用以下 Artisan 命令创建一个新的 Mailable 类:
php artisan make:mail DailyMarketingEmail --view
此命令在 App/Mail 目录中生成一个新的 Mailable 类,并在 resources/views/mail/ 目录中生成一个相应的视图文件 daily-marketing-email.blade.php。您可以在此视图文件中自定义电子邮件的内容。
接下来,我们将创建一个 Artisan 命令来处理发送 DailyMarketingEmail。运行以下命令:
php artisan make:command SendDailyMarketingEmail
该命令会在app/Console/Commands目录下生成一个新的命令类。
生成命令后,您将在生成的类中看到两个关键属性:
protected $signature:这定义了 Artisan 命令的名称和签名。
protected $description:这提供了您的命令的描述。
此类中的句柄方法是您定义命令逻辑的地方。
一切设置完毕后,您可以通过运行以下命令列出所有 Artisan 命令:
php 工匠
您应该在列表中看到您的命令:
现在,让我们在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。
您可以通过运行以下命令来手动测试命令:
php artisan app:send-daily-marketing-emails
考虑使用 Mailtrap 或 MailHog 等工具在测试期间捕获和查看已发送的电子邮件。
最后,为了每天自动发送这封电子邮件,我们需要在 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 运行。您可以根据需要调整时间。
对电子邮件进行排队:对于大量用户来说,对电子邮件进行排队而不是一次发送所有电子邮件是一个很好的做法。这可以通过在 Mailable 类中实现 ShouldQueue 接口来完成。
性能注意事项:对于大型用户群,请考虑优化数据库查询和电子邮件发送过程,以确保高效的性能。
以上是如何在 Laravel 中创建计划任务?的详细内容。更多信息请关注PHP中文网其他相关文章!