مناسبت ها
استفاده پایه
کلاس لاراول
Event
یک پیاده سازی مشاهده گر ساده را ارائه می دهد که به شما امکان می دهد مشترک
شوید و به رویدادهای برنامه خود گوش دهید.
اشتراک در یک رویداد
Event::listen('auth.login', function($user){ $user->last_login = new DateTime; $user->save();});
شلیک یک رویداد
$response = Event::fire('auth.login', array($user));
این
fire
روش آرایهای از پاسخها را برمیگرداند که میتوانید از آنها برای کنترل
اتفاقات بعدی در برنامه خود استفاده کنید.
اشتراک در رویدادهای با اولویت
همچنین می توانید هنگام اشتراک در رویدادها یک اولویت را مشخص کنید. شنوندگان با اولویت بالاتر ابتدا اجرا می شوند، در حالی که شنوندگانی که دارای اولویت یکسان هستند به ترتیب اشتراک اجرا می شوند.
Event::listen('auth.login', 'LoginHandler', 10); Event::listen('auth.login', 'OtherHandler', 5);
توقف انتشار یک رویداد
گاهی اوقات، ممکن است بخواهید انتشار یک رویداد را برای شنوندگان دیگر متوقف
کنید.
میتوانید این کار را با بازگشت
false
از شنونده خود انجام دهید:
Event::listen('auth.login', function($event){ // Handle the event... return false;});
محل ثبت رویدادها
بنابراین، شما می دانید که چگونه رویدادها را ثبت کنید، اما ممکن است تعجب
کنید که
کجا
آنها را ثبت کنید.
نگران نباشید، این یک سوال رایج است.
متأسفانه پاسخ به این سؤال سخت است زیرا تقریباً در هر جایی می توانید
رویدادی را ثبت کنید!
اما، در اینجا چند نکته وجود دارد.
دوباره، مانند بسیاری از کدهای بوت استرپینگ دیگر، می توانید رویدادها را در
یکی از
start
فایل های خود مانند
app/start/global.php
.
اگر
start
فایلهای شما بیش از حد شلوغ میشوند، میتوانید یک
app/events.php
فایل جداگانه ایجاد کنید که از یک
start
فایل موجود است.
این یک راه حل ساده است که ثبت رویداد شما را کاملاً از بقیه راه انداز شما
جدا نگه می دارد.
اگر رویکرد مبتنی بر کلاس را ترجیح می دهید، می توانید رویدادهای خود را در یک ارائه دهنده خدمات ثبت کنید . از آنجایی که هیچ یک از این رویکردها ذاتاً "درست" نیستند، رویکردی را که با آن احساس راحتی می کنید بر اساس اندازه برنامه خود انتخاب کنید.
شنوندگان حروف عام
ثبت شنوندگان رویداد Wildcard
هنگام ثبت شنونده رویداد، می توانید از ستاره ها برای تعیین شنوندگان عام استفاده کنید:
Event::listen('foo.*', function($param){ // Handle the event...});
این شنونده همه رویدادهایی را که با
foo.
.
میتوانید از این
Event::firing
روش برای تعیین دقیق رویداد استفاده کنید:
Event::listen('foo.*', function($param){ if (Event::firing() == 'foo.bar') { // }});
استفاده از کلاس ها به عنوان شنونده
در برخی موارد، ممکن است بخواهید از یک کلاس برای مدیریت یک رویداد به جای بسته شدن استفاده کنید. شنوندگان رویدادهای کلاس از ظرف لاراول IoC حذف میشوند و قدرت کامل تزریق وابستگی را در شنوندگان به شما ارائه میدهند.
ثبت نام شنونده کلاس
Event::listen('auth.login', 'LoginHandler');
تعریف کلاس شنونده رویداد
به طور پیش فرض
handle
متد روی
LoginHandler
کلاس فراخوانی می شود:
class LoginHandler { public function handle($data) { // } }
مشخص کردن کدام روش برای اشتراک
اگر نمی خواهید از
handle
روش پیش فرض استفاده کنید، می توانید روشی را که باید مشترک شود را مشخص
کنید:
Event::listen('auth.login', 'LoginHandler@onLogin');
رویدادهای در صف
ثبت یک رویداد در صف
با استفاده از
queue
و
flush
میتوانید رویدادی را برای شلیک در صف قرار دهید، اما بلافاصله آن را اجرا
نکنید:
Event::queue('foo', array($user));
شما می توانید "Flusher" را اجرا کنید و همه رویدادهای صف را با استفاده از
flush
روش زیر شستشو دهید:
Event::flush('foo');
مشترکین رویداد
تعریف مشترک رویداد
مشترکین رویداد کلاس هایی هستند که ممکن است در چندین رویداد از درون خود
کلاس مشترک شوند.
مشترکین باید
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 array */ public function subscribe($events) { $events->listen('auth.login', 'UserEventHandler@onUserLogin'); $events->listen('auth.logout', 'UserEventHandler@onUserLogout'); } }
ثبت نام مشترک رویداد
هنگامی که مشترک تعریف شد، ممکن است در
Event
کلاس ثبت شود.
$subscriber = new UserEventHandler; Event::subscribe($subscriber);
همچنین میتوانید از
کانتینر لاراول IoC
برای رفع مشکل مشترک خود استفاده کنید.
برای انجام این کار، به سادگی نام مشترک خود را به
subscribe
روش ارسال کنید:
Event::subscribe('UserEventHandler');