نسخه:

مناسبت ها

استفاده پایه

کلاس لاراول 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');