مناسبت ها
استفاده پایه
امکانات رویداد لاراول یک اجرای ناظر ساده را فراهم می کند که به شما امکان می دهد مشترک شوید و به رویدادهای برنامه خود گوش دهید.
کلاسهای رویداد معمولاً در
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');