วิธีสร้าง Hook สำหรับ Models ต่าง ๆ ใน Laravel5.3

เอาหล่ะครับวันนี้ก็ยังคงอยู่ในเรื่องราวของ Laravel5.3 นะครับ ซึ่งในตอนนี้ก็ว่ากันด้วยเรื่องของ Hook หรือถ้าในทาง Laravel เค้าจะเรียกตัวนี้น่า Event ซึ่งสิ่งที่ผมหลายถึงนั้นก็คือคำสั่งที่จะทำเมื่อเกิดการทำอะไรสักอย่างนึงกับข้อมูล เช่น

เมื่อสร้างผู้ใช้งานเสร็จในทำการส่ง Email ไปยืนยันการสมัคร
ก่อนจะทำการสร้างผู้ใช้ให้ทำการเก็บ log เอาไว้ว่ามี IP นี้นะกำลังพยายามบันทึกข้อมูลเข้าสู่ Database อะไรแน่ ๆ นี้

Events ต่าง ๆ ที่ควรรู้

โดยวิธีการทำจะมีอยู่ 2 วิธีด้วยกัน โดยในบทความนี้จะนำเสนอเพียงวิธีเดียวก่อน* แต่ก่อนอื่นเลยเรามาทำความรู้จัก Event ที่มีกันก่อนนะครับ โดย Event ทั้งหมดจะมีตามนี้

  1. creating : ทำก่อนสร้างข้อมูล
  2. created : ทำหลังสร้างข้อมูล
  3. updating : ทำก่อนแก้ไขข้อมูล
  4. updated : ทำหลังแก้ไขข้อมูล
  5. saving : ทำก่อนบันทึกข้อมูล ( เหมือนกับ updateing )
  6. saved : ทำหลังบันทึกข้อมูล ( เหมือนกับ updated )
  7. deleting : ทำก่อนลบข้อมูล
  8. deleted : ทำหลังลบข้อมูล
  9. restoring : ทำก่อนกู้คืนข้อมูลจากการลบแบบ Soft Delete
  10. restored : ทำหลังกูคืนข้อมูลจากการลบแบบ Soft Delete

เมื่อเข้าใจประเภทของ Events ต่าง ๆ แล้วทีนี้มาถึงขั้นตอนการนำมาใช้งานละ

วิธีการใช้งาน

ในกรณีนี้จะทำการเพิ่มการทำงานสำหรับเพิ่ม Event สำหรับเพิ่มคำว่า “คุง” ต่อท้ายให้แก้ User เมื่อมีการสร้าง User ขึ้นมาใหม่ เอาหล่ะเริ่มกันเลย

ให้เปิดไฟล์ root-project/app/Providers/AppServiceProvider.php ขึ้นมาเพื่อแก้ไข เราจะเห็นข้อมูลประมาณนี้

โดยให้แก้ไขไฟล์ให้เป็นดังนี้ครับ

ทดสอบ

เอาหล่ะผมจะลองทดสอบจาก Laravel5.3 ที่เพิ่มสร้างใหม่เลยให้ดูกันนะครับ จะเห็นว่าข้อมูลที่นำเข้าจะเป็นชื่อผมเฉย ๆ ไม่มีคำลงท้ายอะไรเลยแม้แต่น้อย เอาหล่ะกด Register แล้วหล่ะน้าาาาาาา

register

ตูมมมมมม !! เอาหล่ะผลลัพธ์ออกมาแล้วครับนั้นก็คือ ชื่อผมมี “คุง” ต่อท้ายเมื่อมีการสร้าง User ใหม่อย่างที่เราแก้ไขไปจริง ๆ เท่านี้ก็เป็นอันสำเร็จเสร็จสิ้นกระบวนการแล้วครับ :))

registered

เอาหล่ะครับก็จบไปแล้วนะครับกับการสร้าง Event หรือ ในที่อื่น ๆ เค้าจะเรียกกันว่า Hook นะครับ หวังว่าคงเป็นประโยชน์ไม่มากก็น้อย (นั้นสิ พูดทำไม) เอาเป็นว่าผมขอจบไว้เพียงเท่านี้นะครับ แล้วเจอกันใหม่บทความถัดไป

หรือ ใครมีวิธีสร้างโดยใช้ Observer ก็ช่วยแนะนำกันมาบ้างก็ดีนะครับ :))

หมายเหตุ
* เพราะอีกวิธีนึงผมลองแล้วแต่มันไม่ได้ผลเลยต้องขอละไว้ก่อน ถ้าได้แล้วจะมาเขียนบทความเพิ่มเติ่มให้นะครับ :))