В моем приложении я хочу сообщить администратору, что у пользователя есть меньше месяца, чтобы переопределить его тип.По сути, это должно происходить каждые 12 месяцев, поэтому я сделал Mailable
, который принимает пользователя.
<?php
namespace App\Mail\Admin;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
class DeclarationDueToExpire extends Mailable
{
use Queueable, SerializesModels;
/**
* The user instance passed to this Mailable
*
* @var User
*/
public $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this
->to("npiinvestors@newable.co.uk")
->subject('Declaration due to expire for investor ' . $this->user->full_name)
->markdown('emails.admin.declaration-due-to-expire');
}
}
Теперь обычно я просто делаю это как консольную команду и добавляю ее в планировщик:
public function handle()
{
User::whereDate('declaration_date', Carbon::today()->subMonths(11))->get()
->each(function ($user) {
Mail::send(new DeclarationDueToExpire($user));
});
}
Недавно я столкнулся с Jobs
, поэтому я написал тест, используя Job
.
<?php
namespace Tests\Feature;
use App\Jobs\SendDeclarationDueToExpireEmail;
use App\Mail\Admin\DeclarationDueToExpire;
use App\User;
use Carbon\Carbon;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Mail;
class DeclarationSoonToExpireTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function a_notification_is_sent_exactly_eleven_months_after_initial_declaration()
{
Mail::fake();
$dueToExpire = factory(User::class)->create([
'declaration_date' => Carbon::today()->subMonths(11)
]);
dispatch(new SendDeclarationDueToExpireEmail);
Mail::assertSent(DeclarationDueToExpire::class);
}
}
Поскольку мне все равно приходилось бы ежедневно отправлять задание из планировщика,есть ли польза от использования задания в сценарии?
В дополнение к этому, вы могли бы выполнять работу для всех потенциально долго выполняемых задач?
Наконец, как вы, ребята, различаете Mailables
и Notifications
когда уведомление можно отправить по почте?