การพัฒนา 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 ก็จะมีรูปแบบของตัวมันเองก็ลองศึกษาและทดสอบดูนะครับ