[CODEIGNITER]ประยุกต์ใช้ HOOKS เช็คว่าสมาชิกได้ล็อกอินเข้ามาหรือไม่

การพัฒนา Web Application ที่ต้องการให้ใช้งานได้เฉพาะสมาชิกเท่านั้น เราต้องเขียนโค๊ด PHP ดักไว้ เช่น

<?php 
 
	if($member_login){
 
       // ถ้าล้อกอินเข้ามาแล้วให้ทำอะไร
 
	}else{
 
	// อ้าว! ไม่ได้ล็อกอิน กลับไปหน้าล็อกอินก่อนนะครัช
 
	}
 
?>

เราสามารถใช้ Session หรือ Cookie เก็บค่าไว้ในตัวแปร $member_login เพื่อนำมาตรวจสอบ ในที่นี้ผมขอไม่อธิบายนะครับ เพราะผู้ที่กำลังศึกษา CodeIgniter Framework ต้องมีพื้นฐาน PHP มาพอสมควรอยู่แล้ว

สำหรับ CodeIgniter การเขียนโค๊ดเช็คว่า User ทำการ Log in เข้ามาหรือไม่ อันที่จริงเราจะเขียนโค๊ดดักใน Controller เอาก็ได้ แต่ผมจะมาแนะนำอีกวิธีที่ผมคิดว่ามันสะดวกกว่านั่นก็คือการใช้ Hooks

Hooks คืออะไร ?

เมื่อ CodeIgniter รัน Hooks จะทำงานตามที่เรากำหนดไว้ ซึ่งก็คือเมื่อ Web Application รันมันจะเรียกไปที่ Hooks ก่อน ว่ามีการกำหนดฟังก์ชั่นอะไรไว้หรือไม่ ถ้ามี มันจะทำงานตามที่เรากำหนดไว้

มาลองใช้ Hooks กันเลยดีกว่า

ขั้นแรกเราต้องเปิดการใช้งาน Hooks ก่อน โดยไปที่โฟลเดอร์ config และเปิดไฟล์ config.php ขึ้นมาครับ

ต้องทำการเปิดการใช้งาน Hooks ก่อนนะครับถึงจะใช้งานได้

เปลี่ยน $config[‘enable_hooks’] = FALSE;
เป็น $config[‘enable_hooks’] = TRUE;

/*
|--------------------------------------------------------------------------
| Enable/Disable System Hooks
|--------------------------------------------------------------------------
|
| If you would like to use the 'hooks' feature you must enable it by
| setting this variable to TRUE (boolean).  See the user guide for details.
|
*/
$config['enable_hooks'] = TRUE;

จากนั้นเราจะไปทำการสร้าง Class เพื่อเช็คการล็อกอินไปที่โฟลเดอร์ hooks สร้างไฟล์ php ขึ้นมา ในที่นี้ผมตั้งชื่อว่า myhook.php

หลังจากนั้นเราจะสร้าง Class ขึ้นมา 1 Class ผมตั้งชื่อว่า Myhook

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Myhook {
 
	public function __construct(){
	  echo "Construct"."<br/>"; 
 
	}
 
	public function check_login(){
	 echo "Check Login";	
 
	}	
 
}
?> 

จากนั้นเราจะไปกำหนดค่าก่อนนะครับว่าจะให้ hook ทำงานแบบไหน เรียกใช้ไฟล์ไหน Class อะไร และฟังก์ชั่นอะไร โดยไปที่โฟลเดอร์ config เปิดไฟล์ hooks.php ขึ้นมา

กำหนดค่าตามนี้

$hook['post_controller_constructor'] = array(
                                'class'    => 'myhook', //ชื่อคลาสที่เรียกใช้งาน
                                'function' => 'check_login', //ชื่อฟังก์ชั่นที่เรียกใช้งาน
                                'filename' => 'myhook.php', //ชื่อไฟล์ที่เราสร้างคลาส
                                'filepath' => 'hooks'//ชื่อโฟลเดอร์ที่เก็บไฟล์ไว้
                                //'params'   => array('beer', 'wine', 'snacks') //พารามิเตอร์ ถ้าไม่มีก็ไม่ต้องกำหนดและปิดไว้ไม่ใช้งาน
                                );


ตรง $hook[‘post_controller_constructor’] คือการกำหนดว่าจะให้ hook ทำงานเมื่อไร

ซึ่งก็มีหลายแบบเช่น
pre_system ถูกเรียกตั้งแต่แรกเริ่มของการทำงานระบบ
pre_controller ถูกเรียกทันทีก่อนที่ตัวควบคุม (controller) ใดๆจะถูกเรียก
post_controller_constructor ถูกเรียกทันทีเมื่อ constructructor ทำงาน
post_controller ถูกเรียกทันทีเมื่อ controller ทำงานเสร็จสมบรูณ์

สามารถศึกษาเพิ่มเติมได้ที่ User Guide ของ CodeIgniter
http://ellislab.com/codeigniter/user-guide/general/hooks.html

ซึ่งผมจะใช้ post_controller_constructor เมื่อ constructor ทำงานแล้วให้เรียก hook ทันที

หลังจากกำหนดค่าเสร็จแล้วลองรัน Application ดูครับ ถ้าไม่มีอะไรผิดพลาดจะแสดงข้อความที่กำหนดไว้ในคลาส Myhook ดังภาพ

ในคลาส Myhook ผมกำหนดใน constructor ให้ echo คำว่า Construct และฟังก์ชั่น check_login() ให้ echo คำว่า Check Login ออกมา


นั่นแสดงว่า เราจะสามารถกำหนดคำสั่งเงื่อนไขลงไปในคลาส Myhook แทนคำสั่ง echo ได้เลย

ทีนี้ถ้าเราจะกำหนดเงื่อนไขตรวจสอบการล็อกอินเข้ามาหรือไม่ก็ไม่ยากเลย ใช้ if else ตามที่ผมกล่าวมาตั้งแต่ต้นเรื่อง ส่วนตัวแปร $member_login ก็เป็น Session หรือ Cookie สำหรับผู้ที่พื้นฐาน PHP ก็น่าจะรู้แล้วนะครับ
แต่ว่าการใช้ Session ใน CodeIgniter ก็จะมีรูปแบบของตัวมันเองก็ลองศึกษาและทดสอบดูนะครับ

เข้าสู่ระบบ