رخدادها (event ها) در لاراول
رخدادها در Laravel با پیاده سازی الگوی observer این امکان را فراهم می آورد تا برای event های برنامه ی خود subscribe کرده (به آن ها گوش داده) و گوش فراخوان تخصیص دهید. کلاس های Event معمولا در پوشه ی app/Events ذخیره شده در حالی است که گوش فراخوان های آن ها (listener) در دایرکتوری app/Listeners نگه داری می شوند.
ثبت event ها / Listener ها
EventServiceProvider که با لاراول عرضه می شود محلی مناسب برای ثبت تمامی event listener ها فراهم می کند. پراپرتی listen آرایه ای از تمامی event ها (کلیدها) و listener های مربوطه ی آن ها (مقادیر آن ها) را در خود نگه می دارد. می توانید با توجه به نیاز اپلیکیشن خود هر تعداد event که مورد نیاز است به این آرایه اضافه نمایید. در زیر یک رخداد به نام PodcastWasPurchased به آرایه ی مزبور اضافه می کنیم:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
‘App\Events\PodcastWasPurchased’ => [
‘App\Listeners\EmailPurchaseConfirmation’,
],
];
نحوه ی تعریف Event ها
کلاس event صرفا یک ظرف برای ذخیره ی اطلاعات مربوط به رخدادهای برنامه می باشد. برای مثال تصور کنید رخداد PodcastWasPurchasedای که خود تعریف کرده ایم یک شی Eloquent دریافت می کند:
<?php
namespace App\Events;
use App\Podcast;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
class PodcastWasPurchased extends Event
{
use SerializesModels;
public $podcast;
/**
* Create a new event instance.
*
* @param Podcast $podcast
* @return void
*/
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
همان طور که از مثال فوق مشاهده می شود، این کلاس event هیچ منطق خاصی را دربرنمی گیرد. بلکه صرفا یک ظرف برای نگهداری اطلاعات شیPodcast خریداری شده می باشد. چنانچه شی event توسط تابع serialize زبان PHP سریال شده باشد، در آن صورت تریت SerializesModels (که event داخل کلاس از آن استفاده می کند) تمامی مدل های Eloquent را به صورت سریال در می آورد.