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 }
เมื่อประกาศคลาสแล้ว การนำไปใช้งานเราก็ต้องเอาไปลงทะเบียนกับคลาสหลัก