توزیع کار با استفاده از Laravel 11 و متد dispatchIf
Laravel یک چارچوب محبوب و قدرتمند PHP است که به توسعهدهندهها این امکان را میدهد تا برنامههای وب را بهراحتی و با حداقل کد بنویسند. یکی از قابلیتهای جذاب این چارچوب، مدیریت تسکهاست که به شما کمک میکند تا کدهایتان را به صورت پسزمینه اجرا کنید. متد dispatchIf
بخشی از این مدیریت وظایف است که به شما اجازه میدهد تنها در صورت رسیدن به یک شرط خاص، فعالیتی را انجام دهید. در این مقاله به بررسی این متد میپردازیم و مثالهای کاربردی از آن ارائه میدهیم.
متد dispatchIf
به شما امکان میدهد که یک تسک را تنها در صورتی که شرایط خاصی برآورده شود، ارسال کنید. به این ترتیب میتوانید از اجرای فوری تسکها خودداری کنید و صرفهجویی در منابع سیستمی داشته باشید. این متد به خصوص در زمانهایی که نیاز دارید تا عملکردهای سنگین را در پسزمینه اجرا کنید، بسیار مفید است.
به عنوان یک مثال عملی، فرض کنید که میخواهید یک ایمیل به کاربر ارسال کنید، اما تنها در صورتی که کاربر جدیدی به سیستم اضافه شده باشد. با استفاده از dispatchIf
میتوانیم این تسک را تنها در صورتی که کاربر جدید باشد، ارسال کنیم.
حالا بیایید نگاهی به کد داشته باشیم تا ببینیم چگونه میتوانیم این کار را انجام دهیم. ما یک تسک برای ارسال ایمیل تعریف میکنیم و سپس با استفاده از dispatchIf
آن را در صورت برآورده شدن شرایط، اجرا میکنیم.
// تعریف تسک ایمیل
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, SerializesModels;
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
// کد ارسال ایمیل
}
}
// ارسال ایمیل تنها در صورت جدید بودن کاربر
if ($user->wasRecentlyCreated) {
SendWelcomeEmail::dispatchIf($user->wasRecentlyCreated, $user);
}
توضیحات کد
در این بخش، کد را خط به خط بررسی میکنیم:
کلاس SendWelcomeEmail
class SendWelcomeEmail implements ShouldQueue
: این خط کلاس ما را تعریف میکند و به آن میگوییم که این تسک باید در صف قرار گیرد.
متد __construct
public function __construct(User $user)
: در اینجا ما یک کاربر جدید را از نوع کلاس User
به عنوان ورودی دریافت میکنیم.
متد handle
public function handle()
: این متد جایی است که ما کد ارسال ایمیل را مینویسیم.
استفاده از dispatchIf
SendWelcomeEmail::dispatchIf($user->wasRecentlyCreated, $user);
: در این خط، ما با استفاده از dispatchIf
تسک را تنها در صورتی که $user->wasRecentlyCreated
صحیح باشد، ارسال میکنیم.