Events

<a name="basic-usage"></a> ## การใช้งานเบื้องต้น

คลาส Event เตรียมมาให้เราใช้ในการดักจับเหตุการณ์ต่างๆที่เกิดขึ้นบน เว็บของเรา หมายเหตุ Event คือเหตุการใดที่เกิดขึ้นบนเว็บเรา ยกตัวอย่างการเพิ่มลบแก้ไข , Listener คือ ฟังก์ชันที่คอยดักจับเหตุการ , fire คือฟังก์ชันที่สั่งให้เกิดเหตุการขึ้นเพื่อให้ listerner ทำงาน

ใครนึกไม่ออกให้นึกถึง event บน jquery ครับ

การดักรอฟังเหตุการณ์

1 Event::listen('user.login', function($user)
2 {
3 	$user->last_login = new DateTime;
4 
5 	$user->save();
6 });

การสั่งให้เกิดเหตุการณ์ขึ้น

1 $event = Event::fire('user.login', array($user));

เราสามารถกำหนดลำดับเหตุการที่จะให้เกิดได้ โดยค่าลำดับที่เกิดเรียงจากน้อยไปหามาก.

การใช้ลำดับควบคุมการทำงาน

1 Event::listen('user.login', 'LoginHandler', 10);
2 
3 Event::listen('user.login', 'OtherHandler', 5);

บางครั้งเราอยากจะให้ฟังก์ชันที่ดักฟังอยู่ทำงานแค่ครั้งเดียว เราสามารถใช้การ return false เพื่อหยุดฟังก์ชันนี้ได้ <br /><br /><br /><br /> หยุดการทำงานของเหตุการ

1 Event::listen('user.login', function($event)
2 {
3 	// Handle the event...
4 
5 	return false;
6 });

### ประกาศไว้ตรงไหนดี

เราก็สร้างไฟล์อีกไฟล์ให้ชื่อว่า event.php ไว้ตรงที่เดียวกับไฟล์ route.php แล้วนำไป include ไว้ในไฟล์ start.php ในโฟลเดอร์ global

<a name="wildcard-listeners"></a> ## Wildcard Listeners

คือการดักฟังทุกเหตุการเลย ไม่เฉพาะเจาะจงเเล้ว

การใช้งาน

1 Event::listen('foo.*', function($param, $event)
2 {
3 	// Handle the event...
4 });

ทีนี้ถ้ามีเหตุการณ์อะไรที่ขึ้นต้นด้วย foo..ฟังก์ชันในตัวอย่างก็จะทำงาน

<a name="using-classes-as-listeners"></a> ## ใช้ Classes กับ Listeners

ในบางกรณี เราสามารถผูกคลาสเข้ากับเหตุการได้ โดย laravel จะผูกคลาสเข้าไป

ตัวอย่าง

1 Event::listen('user.login', 'LoginHandler');

โดยค่าเริ่มต้นฟังก์ชัน handle ในคลาส LoginHandlerจะถูกเรียกก่อนเลย เหมือนกับ _construct <br /><br /><br /><br /> ฟังก์ชัน handle จะถูกเรียกใช้เลย

1 class LoginHandler {
2 
3 	public function handle($data)
4 	{
5 		//
6 	}
7 
8 }

ถ้าเราไม่ต้องการ ก็ผูกเมทอดที่เราต้องการเข้าไปดังนี้ครับ

1 Event::listen('user.login', 'LoginHandler@onLogin');

<br /><br /> <a name="queued-events"></a> ## การเรียงลำดับเหตุการ

ใช้ฟังก์ชัน queue กับ flush ในการเรียงลำดับการเกิดเหตุการ

การสร้างลำดับ

1 Event::queue('foo', array($user));

<a name="event-subscribers"></a> ## Event Subscribers

คือคลาสที่เราแบ่งกลุ่มฟังก์ชันที่ใช้จัดการเหตุการ โดยต้นทางมาจากฟังก์ชัน subscribe

ตัวอย่าง

1 $subscriber = new UserEventHandler;
2 
3 Event::subscribe($subscriber);

<br /><br /> ตัวอย่างการสร้างคลาส Subscriber

 1 class UserEventHandler {
 2 
 3 	/**
 4 	 * track user login
 5 	 */
 6 	public function onUserLogin($event)
 7 	{
 8 		//
 9 	}
10 
11 	/**
12 	 * track user logout
13 	 */
14 	public function onUserLogout($event)
15 	{
16 		//
17 	}
18 
19 	/**
20 	 * fire event to observer event
21 	 *
22 	 */
23 	public function subscribe($events)
24 	{
25 		$events->listen('user.login', 'UserEventHandler@onUserLogin');
26 
27 		$events->listen('user.logout', 'UserEventHandler@onUserLogout');
28 	}
29 
30 }

เมื่อประกาศคลาสแล้ว การนำไปใช้งานเราก็ต้องเอาไปลงทะเบียนกับคลาสหลัก