codeigniter hooks ทำความเข้าใจและใช้งาน hooks point
สำหรับ hooks ใน codeigniter เป็นฟีเจอร์ที่มีไว้สำหรับปรับเปลี่ยนลำดับขั้นตอนการทำงานหรือแทรกความสามารถ
บางอย่างเข้าไปแบบมีลำดับขั้นตอน โดยที่ไม่ต้องเข้าไปยุ่งเกี่ยวกับไฟล์หลัก ตัวอย่างเช่น อาจมีบางกรณีที่เราต้องการ
เพิ่มข้อมูลเข้าไปในส่วนของ controller ใด ๆ ก่อนที่จะเข้าสู่การทำงานของ constructure ฟังก์ชั่น
ของ controller นั้น ๆ หรืออาจจะต้องการเพิ่มการทำงานบางอย่างเข้าไปหลังจากที่ constructure ทำงานเสร็จแล้ว
หรือแม้กระทั้ง controller นั้น ๆ ได้ทำงานเสร็จแล้วค่อยเรียกการทำงานบางอย่างเข้าไป ก็สามารถทำได้ด้วย
Hooks class เช่นเดียวกัน
เปิดใช้งาน hooks
สำหรับการเปิดใช้งาน hooks ให้เปิดไฟล์ application/config/config.php และเปลี่ยนตัวแปร enable_hooks
จากค่าปกติที่เป็น FALSE ให้เป็น TRUE
$config['enable_hooks'] = TRUE;
สร้างไฟล์ hooks class
การสร้าง hooks คลาสนั้น ให้เราสร้างไว้ในโฟลเด้อ application/hooks/ ในที่นี้ให้เราทดลองสร้างไฟล์ WebHook.php
โดยที่ภายในคลาสนี้เราจะต้องสร้าง method มาเพื่อระบุการทำงานใน hooks แต่ละขั้นตอนด้วย จะได้โค๊ดประมาณนี้
application/hooks/WebHook.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class WebHook { public function __construct(){ } public function pre_system(){ echo "pre_system.<br>"; } } ?>
เรียกใช้งานแบบเป็นลำดับขั้นตอนของ hooks class
หลังจากได้คลาสและฟังก์ชั่นที่จะเรียกใช้งานแล้ว ให้เราไปกำหนดลำดับการทำงานที่ไฟล์
สำหรับการสั่งให้คลาส WebHook ทำงานแต่ละเมธอดแบบเป็นลำดับขั้นนั้นเราจะเขียนคำสั่งใน hooks.php ได้ดังนี้
application/config/hooks.php
'WebHook', // ชื่อคลาส 'function' => 'pre_system', // ชื่อฟังก์ชั่นที่เรียกใช้งานหรือเมธอด 'filename' => 'WebHook.php', // ชื่อไฟล์ 'filepath' => 'hooks', // โฟลเด้อหรือตำแหน่งของไฟล์ 'params' => '' // สำหรับส่งตัวแปรพารามิเตอร์ไปแบบอาเรย์ );
Hook Points
ในการเรียกใช้งาน hook class นั้น จะต้องมีตัวแปรสำหรับเป็นตัวกำหนดลำดับขั้นตอนการทำงาน
เราเรียกสิ่งนั้นว่า Hook Points ใน codeigniter framework มี Hook Points ให้เราเลือกใช้งานอยู่หลัก ๆ ดังนี้
- pre_system ถูกเรียกตั้งแต่แรกเริ่มของการทำงานระบบ
- pre_controller ถูกเรียกทันทีก่อนที่ตัวควบคุม (controller) ใดๆจะถูกเรียก
- post_controller_constructor ถูกเรียกทันทีเมื่อ constructructor ทำงาน
- post_controller ถูกเรียกทันทีเมื่อ controller ทำงานเสร็จสมบรูณ์
- post_system ถูกเรียกหลังสิ้นสุดการทำงานของระบบหลักทั้งหมด
hook points อื่น ๆ ท่านสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ https://www.codeigniter.com/user_guide/general/hooks.html
สร้าง Controller มาทดสอบการทำงาน
หลังจากที่เราได้ตั้งค่าเปิดใช้งาน สร้าง hook class และเรียกใช้งานฟังก์ชั่นของ hook class แล้ว
ขั้นตอนต่อไปให้ลองสร้าง controller มาทดสอบการทำงานดูว่าผลลัพธ์จะเป็นอย่างไร
application/controllers/Home.php
ผลลัพธ์
pre_systemทดสอบลำดับขั้นตอนการทำงานของ Hook Points
เขียนฟังก์ชั่นเพิ่มเติมสำหรับเรียกใช้งานแต่ละ point ใน application/hooks/WebHook.php ดังนี้
application/hooks/WebHook.php"; } public function pre_controller(){ echo "pre_controller.
"; } public function post_controller_constructor(){ echo "post_controller_constructor.
"; } public function post_controller(){ echo "post_controller.
"; } public function post_system(){ echo "post_system.
"; } } ?>เรียกใช้งานฟังก์ชั่นแบบลำดับขั้นตอนโดยกำหนด hook points ที่ไฟล์ application/config/hooks.php ดังนี้
application/config/hooks.php'WebHook', 'function' => 'pre_system', 'filename' => 'WebHook.php', 'filepath' => 'hooks', 'params' => '' ); $hook['pre_controller'] = array( 'class' => 'WebHook', 'function' => 'pre_controller', 'filename' => 'WebHook.php', 'filepath' => 'hooks', 'params' => '' ); $hook['post_controller_constructor'] = array( 'class' => 'WebHook', 'function' => 'post_controller_constructor', 'filename' => 'WebHook.php', 'filepath' => 'hooks', 'params' => '' ); $hook['post_controller'] = array( 'class' => 'WebHook', 'function' => 'post_controller', 'filename' => 'WebHook.php', 'filepath' => 'hooks', 'params' => '' ); $hook['post_system'] = array( 'class' => 'WebHook', 'function' => 'post_system', 'filename' => 'WebHook.php', 'filepath' => 'hooks', 'params' => '' );ผลลัพธ์
pre_system. pre_controller. post_controller_constructor. post_controller. post_system.
หลังจากที่เราทดสอบการทำงานแบบนี้แล้ว จะทำให้เราทราบว่า hook point ไหน ทำงานก่อน - หลัง และทำงานตอนไหน
เมื่อทราบอย่างนี้แล้วก็จะสามารถทำความสามารถของ hooks ใน codeigniter framework ไปประยุกต์ใช้ในการทำงาน
พัฒนาเว็บไซต์ในรูปแบบต่าง ๆ ได้ดียิ่งขึ้น และยังเป็นการใช้ความสามารถของ codeigniter ได้อย่างเต็มที่อีกด้วย