نسخه:

مناسبت ها

استفاده پایه

امکانات رویداد لاراول یک اجرای ناظر ساده را فراهم می کند که به شما امکان می دهد مشترک شوید و به رویدادهای برنامه خود گوش دهید. کلاس‌های رویداد معمولاً در app/Events دایرکتوری ذخیره می‌شوند، در حالی که کنترل‌کننده‌های آنها در دایرکتوری ذخیره می‌شوند app/Handlers/Events .

می توانید با استفاده از ابزار Artisan CLI یک کلاس رویداد جدید ایجاد کنید:

php artisan make:event PodcastWasPurchased

اشتراک در یک رویداد

همراه EventServiceProvider با برنامه لاراول شما مکان مناسبی را برای ثبت نام همه گردانندگان رویداد فراهم می کند. این listen ویژگی شامل آرایه ای از همه رویدادها (کلیدها) و کنترل کننده های آنها (مقادیر) است. البته، ممکن است هر تعداد رویداد که برنامه شما نیاز دارد به این آرایه اضافه کنید. به عنوان مثال، بیایید PodcastWasPurchased رویداد خود را اضافه کنیم:

/**
* The event handler mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\PodcastWasPurchased' => [
'App\Handlers\Events\EmailPurchaseConfirmation',
],
];

برای ایجاد یک کنترل کننده برای یک رویداد، از handler:event دستور Artisan CLI استفاده کنید:

php artisan handler:event EmailPurchaseConfirmation --event=PodcastWasPurchased

البته، اجرای دستی دستورات make:event و handler:event هر بار که به یک کنترلر یا رویداد نیاز دارید، دست و پا گیر است. در عوض، به سادگی کنترل کننده ها و رویدادها را به خود اضافه کنید EventServiceProvider و از event:generate دستور استفاده کنید. این دستور هر رویداد یا کنترل کننده ای را که در لیست شما وجود دارد ایجاد می کند EventServiceProvider :

php artisan event:generate

شلیک یک رویداد

اکنون ما آماده هستیم تا رویداد خود را با استفاده از Event نما اجرا کنیم:

$response = Event::fire(new PodcastWasPurchased($podcast));

این fire روش آرایه‌ای از پاسخ‌ها را برمی‌گرداند که می‌توانید از آنها برای کنترل اتفاقات بعدی در برنامه خود استفاده کنید.

همچنین می توانید از event کمک کننده برای اجرای یک رویداد استفاده کنید:

event(new PodcastWasPurchased($podcast));

شنوندگان بسته

شما حتی می توانید بدون ایجاد یک کلاس کنترل جداگانه به رویدادها گوش دهید. به عنوان مثال، در boot متد خود EventServiceProvider ، می توانید موارد زیر را انجام دهید:

Event::listen('App\Events\PodcastWasPurchased', function($event)
{
// Handle the event...
});

توقف انتشار یک رویداد

گاهی اوقات، ممکن است بخواهید انتشار یک رویداد را برای شنوندگان دیگر متوقف کنید. می توانید این کار را با بازگشت false از کنترلر خود انجام دهید:

Event::listen('App\Events\PodcastWasPurchased', function($event)
{
// Handle the event...
 
return false;
});

کنترل کننده رویداد در صف

آیا نیاز به صف نگهدارنده رویداد دارید؟ این نمی تواند آسان تر باشد. هنگام تولید کنترل کننده، به سادگی از --queued پرچم استفاده کنید:

php artisan handler:event SendPurchaseConfirmation --event=PodcastWasPurchased --queued

این یک کلاس handler ایجاد می کند که Illuminate\Contracts\Queue\ShouldBeQueued رابط را پیاده سازی می کند. خودشه! اکنون هنگامی که این کنترلر برای یک رویداد فراخوانی می شود، به طور خودکار توسط توزیع کننده رویداد در صف قرار می گیرد.

اگر هیچ استثنایی در زمانی که کنترل کننده توسط صف اجرا می شود وجود نداشته باشد، کار در صف پس از پردازش به طور خودکار حذف می شود. اگر نیاز دارید که به صورت دستی به کارها delete و release روش های در صف دسترسی داشته باشید، می توانید این کار را انجام دهید. این Illuminate\Queue\InteractsWithQueue ویژگی که به طور پیش‌فرض در کنترل‌کننده‌های صف گنجانده شده است، به شما امکان دسترسی به این روش‌ها را می‌دهد:

public function handle(PodcastWasPurchased $event)
{
if (true)
{
$this->release(30);
}
}

اگر یک کنترل کننده موجود دارید که می خواهید آن را به یک کنترل کننده صف تبدیل کنید، به سادگی ShouldBeQueued رابط را به صورت دستی به کلاس اضافه کنید.

مشترکین رویداد

تعریف مشترک رویداد

مشترکین رویداد کلاس هایی هستند که ممکن است در چندین رویداد از درون خود کلاس مشترک شوند. مشترکین باید subscribe روشی را تعریف کنند که به یک نمونه توزیع کننده رویداد ارسال می شود:

class UserEventHandler {
 
/**
* Handle user login events.
*/
public function onUserLogin($event)
{
//
}
 
/**
* Handle user logout events.
*/
public function onUserLogout($event)
{
//
}
 
/**
* Register the listeners for the subscriber.
*
* @param Illuminate\Events\Dispatcher $events
* @return void
*/
public function subscribe($events)
{
$events->listen('App\Events\UserLoggedIn', 'UserEventHandler@onUserLogin');
 
$events->listen('App\Events\UserLoggedOut', 'UserEventHandler@onUserLogout');
}
 
}

ثبت نام مشترک رویداد

هنگامی که مشترک تعریف شد، ممکن است در Event کلاس ثبت شود.

$subscriber = new UserEventHandler;
 
Event::subscribe($subscriber);

همچنین می توانید از کانتینر سرویس برای رفع مشکل مشترک خود استفاده کنید. برای انجام این کار، به سادگی نام مشترک خود را به subscribe روش ارسال کنید:

Event::subscribe('UserEventHandler');