Hooks (ตะขอ) - ขยายระบบหลัก
คุณสมบัติตะขอที่ CodeIgniter มีไว้ให้หมายถึงการได้ประโยชน์และการเปลี่ยนแปลงการทำงานภายในของเฟรมเวิร์คโดยไม่ยุ่งเกี่ยวกับไฟล์ระบบหลัก. เมื่อ CodeIgniter รันมันจะทำตามการทำงานตามที่กำหนด ตามแผนภาพที่อยู่ในหน้า ขั้นตอนการทำงานของแอพพลิเคชั่น อย่างไรก็ตามคุณสามารถกำหนดให้มันทำหรือเปลี่ยนแปลงในเวลาที่กำลังดำเนินการการได้ ยกตัวอย่างเช่น คุณต้องการรันสคริปก่อนที่ตัวควบคุมจะถูกโหลดขึ้นหรือหลังโหลด หรือคุณอาจจะต้องการให้สคริปคุณถูกกระตุ้นในตำแหน่งอื่นๆ
เปิดคุณสมบัติตะขอ
คุณสมบัติตะขอสามารถถูกเปิด/ปิดทั้งระบบได้โดยการตั้งค่าในไฟล์ application/config/config.php :
$config['enable_hooks'] = TRUE;
กำหนดตะขอ
ตะขอสามารถถูกกำหนดได้ในไฟล์ application/config/hooks.php แต่ละตะขอมีการกำหนดเป็นอาเรย์ด้วยต้นแบบนี้
$hook['pre_controller'] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
สังเกตุ:
ตัวชี้อาเรย์ (index) มีความสัมพันธ์ร่วมกับชื่อของปลายตะขอที่คุณเลือกใช้ ในตัวอย่างด้านบนปลายตะขอก็คือ pre_controller. โดยชื่อของปลายตะขอจะอยู่ด้านล่าง
โดยมีของดังต่อไปนี้ที่ต้องกำหนดในอาเรย์ตะขอ:
- class ชื่อคลาสที่คุณต้องการเรียก ถ้าคุณต้องการเรียกเพียงฟังก์ชั่นที่ไม่มีคลาสก็ปล่อยอันนี้ให้ว่างไว้
- function ชื่อฟังก์ชั่นที่คุณต้องการเรียก
- filename ชื่อไฟล์ที่มีคลาสหรือฟังก์ชั่นของคุณอยู่
- filepath ชื่อไดเรคทอรี่ที่มีสคริปของคุณอยู่ หมายเหตุสคริปของคุณจะต้องอยู่ภายในไดเรคทอรี่ภายใต้โฟลเดอร์ application เท่านั้น, โดย filepath ก็คือชื่อโฟลเดอร์นั้น ตัวอย่างเช่น ถ้าสคริปของคุณวางไว้ที่ application/hooks คุณก็ใช้เพียงคำว่า hooks เป็น filepath ถ้าสคริปของคุณอยู่ที่ application/hooks/utilities คุณก็ต้องใช้ hooks/utilities เป็น filepath โดยไม่ต้องตัดเครื่องหมายเส้นแบ่ง (/)
- params พารามิเตอร์ต่างๆที่คุณต้องการจะส่งไปในสคริปของคุณ อันนี้เป็นทางเลือกไม่จำเป็นต้องใส่ก็ได้
เรียกตะขอเดิมหลายครั้งพร้อมกัน
ถ้าคุณต้องการใช้ตะขอเดิมมากกว่าหนึ่งสคริป ให้คุณเพิ่มอาเรย์ตอนประกาศแบบนี้:
$hook['pre_controller'][] = array(
'class' => 'MyClass',
'function' => 'Myfunction',
'filename' => 'Myclass.php',
'filepath' => 'hooks',
'params' => array('beer', 'wine', 'snacks')
);
$hook['pre_controller'][] = array(
'class' => 'MyOtherClass',
'function' => 'MyOtherfunction',
'filename' => 'Myotherclass.php',
'filepath' => 'hooks',
'params' => array('red', 'yellow', 'blue')
);
สังเกตุวงเล็บจะอยู่หลังตัวชี้อาเรย์ (array index) :
$hook['pre_controller'][]
สิ่งนี้ยินยอมให้คุณใช้ปลายตะขอเดียวกับหลายสคริป โดยขั้นตอนการทำงานจะขึ้นอยู่กับลำดับที่คุณกำหนดอาเรย์ของคุณ
ปลายตะขอ
สิ่งต่อไปนี้คือปลายตะขอที่มีให้ใช้
- pre_system
ถูกเรียกตั้งแต่แรกเริ่มของการทำงานระบบ โดยมีคลาสวัดการประมวลผลและคลาสตะขอ (Benchmark and Hooks Class) ที่ถูกโหลด ณ จุดนี้ ยังไม่มีเรื่องกำหนดเส้นทางหรือการทำงานอื่นเกิดขึ้น - pre_controller
ถูกเรียกทันทีก่อนที่ตัวควบคุม (controller) ใดของคุณจะถูกเรียก โดยขั้นตอนนี้การโหลดคลาสพื้นฐาน , กำหนดเส้นทาง(routing), และตรวจสอบความปลอดภัยได้ทำเสร็จเรียบร้อยไปแล้ว - post_controller_constructor
ถูกเรียกทันทีเมื่อตัวสร้างคลาสของตัวควบคุมของคุณถูกสร้างขึ้นเสร็จเรียบร้อย แต่ยังไม่มีการเรียก method ใดๆเกิดขึ้น - post_controller
ถูกเรียกทันทีเมื่อตัวควบคุมถูกสร้างขึ้นเสร็จอย่างสมบูรณ์แบบ - display_override
ลบล้างฟังก์ชั่น _display() ที่เคยถูกทำไว้ส่งหน้าที่เสร็จสิ้นการทำงานไปยังเว็บบราวเซอร์ สิ่งนี้ยอมให้คุณใช้การวิธีการแสดงข้อมูลของคุณเอง คุณจะต้องใช้ CI superobject ด้วยคำสั่ง $this->CI =& get_instance() และข้อมูลสุดท้ายจะพร้อมแล้วให้คุณเรียกด้วยคำสั่ง $this->CI->output->get_output() - cache_override
ยอมให้คุณเรียกฟังก์ชั่นของคุณเองแทนที่จะใช้ฟังก์ชั่น _display_cache() ของ output class สิ่งนี้ยอมให้คุณใช้กลไกการแสดงผลข้อมูลที่ cache ไว้เอง - scaffolding_override
เมื่อมีการร้องขอโครงยกพื้น(scaffolding) ปลายตะขอนี้ยินยอมให้เรียกการทำงานสคริปของคุณแทนได้ - post_system
ถูกเรียกขึ้นหลังจากหน้าที่จะถูกแสดงถูกส่งไปยังบราวเซอร์ เป็นจุดสิ้นสุดของการทำงานระบบหลักจากที่ส่งข้อมูลสุดท้ายไปยังบราวเซอร์