[CI Day 5] การสร้าง Bootstrap ให้กับ Application

เริ่มเบื่อกันรึยังครับ กับบทความของ CI ผมเองเริ่มจะเอียนละเหมือนกัน T_T แต่ไหนๆ จะเขียนทั้งทีแล้วขอให้ มันจบอย่างสมบูรณ์หน่อยเหอะ แฟนๆ jQuery อย่าเพิ่งเบื่อกันนะครับ ต่อไปผมจะพยายาม เอาบทความเรื่อง jQuery มาแทรกๆ บ้างละกัน

วันนี้เรามาดูเรื่องการสร้าง Bootstrap หรือ ส่วนที่จะให้ทำงานทันที เมื่อระบบเริ่มต้นขึ้น โดยเรื่องนี้มันเป็นเรื่องที่เกี่ยวข้องกับ Hooks ของ CI ครับ ผมจะเอามาประยุกต์ใช้งานในส่วนนี้

ลองนึกภาพตามนะครับ ก่อนที่เราจะเขียนมันมักจะต้องมีส่วนนึงที่ มันเรียกใช้กันแทบจะทุก page เช่นส่วนของ การ เช็ค permission, language selected ซึ่งมักจะเป็นในรูปแบบ Logic คือมีการคิด ไม่ใช่ Configuration ดังนั้นส่วนนี้ มันไม่ควรอยู่ใน application/config/ ถูกต้องมั้ยครับ?

ทีนี้เราลองมาดูเรื่อง hooks ของ CI กันว่ามันคืออะไร?
ถ้าไปอ่านตาม Concept ของ hooks ใน manual ก็พอจะสรุปได้ว่า มันมีหน้าที่คล้ายๆ Trigger คือ สั่งให้ทำงาน ก่อน หลัง ที่จะทำ …. อะไรสักอย่างแบบนั้น

โดยจะมีค่า ดังนี้
pre_system – รันก่อนที่จะทำการ execute system จะมีแค่ benchmark และ hooks เท่านั้นที่จะทำงาน
pre_controller – รันทันทีที่มีการเรียก Controller หมายถึง ทุก methods จะมี route, security check ที่จะรันในขณะนี้
post_controller_constructor – รันทันทีที่หลังจาก construct (แปลยากวุ้ย)
post_controller – รันหลังจากที่ controller executed เรียบร้อยแล้ว
display_override – ทับ method _display โดยใช้รูปแบบของเราเอง*
cache_override – เหมือนข้างบนแต่เปลี่ยนเป็น _display_cache*
scaffolding_override – เปลี่ยน scaffolding ให้ใช้ในรูปแบบเราแทน*
post_system – เรียกหลังจาก render html รวมไปถึง executed ทั้งหมดเรียบร้อยแล้ว
ที่มาร์ค * ไว้ คือผมยังไม่ได้ลองใช้เลย

แต่ในที่นี้เราจะมาทำ Bootstrap กัน ผมจะเลือกใช้ post_controller_constructor ดังนั้น มันควรจะรันทันที หลังจากที่ class ถูก instanced นั้นก็คือ มันจะรันก่อนที่เราจะทำการเรียก method ซะอีก จึงสามารถเอามาใช้งานได้ตามจุดประสงค์

วิธีการก็คือ ไปที่ [CI]/application/config/hooks.php แล้วเขียนแบบนี้

  1. <?php
  2. $hook[‘post_controller_constructor’][] = array(
  3.         ‘class’ => ‘Bootstrap’,
  4.         ‘function’ => ‘preloading’,
  5.         ‘filename’ => ‘Bootstrap.php’,
  6.         ‘filepath’ => ‘hooks’,
  7.         ‘params’ =>
  8. );
  9. ?>

ที่ใช้ [] เพราะว่าบางทีเราอาจจะมีตัวที่ทำงานแบบนี้อีกหลายตัวเลยใช้เป็น array ไว้ก่อน
class จะหมายถึงว่า เราจะให้ไปเรียก class ที่ชื่อว่าอะไร
function จะหมายถึง method ที่ต้องการเรียกใน class นั้นๆ
filename จะหมายถึง ชื่อไฟล์ที่มี class และ method นั้นๆ อยู่
filepath จะหมายถึง folder ที่มีไฟล์นี้อยู่นั่นเองแนะนำว่า อยู่ hooks ดีแล้วล่ะ
params เป็น parameters ที่จะส่งไปให้ method โดยรับค่าเป็น array

ทีนี้เราลองมาเขียนไฟล์ Bootstrap กันเลย ตามที่เรา config ไว้ก็จะต้องไปเขียนที่
[CI]/application/hooks/

ให้สร้างไฟล์ตามนี้ขึ้นมา -> Bootstrap.php โดยข้างในบรรจุโคด ดังนี้

  1. <?php
  2. if (!defined(‘BASEPATH’)) exit(‘No direct script access allowed’);
  3. class  Bootstrap {
  4.   function __construct()
  5.   {
  6.     //เราสามารถเรียก ci มาใช้งานตรงนี้ได้เช่น
  7.     $this->CI =& get_instance();
  8.   }
  9.  
  10.   function preloading()
  11.   {
  12.     echo "เราสามารถเขียนโคด login ตรงนี้ได้เลย";
  13.   }
  14. }
  15. ?>

ทีนี้ก็ลองไป run controller ดูไม่ว่าจะเป็นตัวไหนก็ตาม มันจะ echo ค่าที่อยู่ใน preloadding มาเสมอ

ทีนี้การบ้านก็คือ ไปศึกษาการใช้งาน hooks ให้ดีครับ เพราะว่าเราจะใช้ hooks นี่ล่ะครับ ในการช่วย plug ZEND framework

——————— Addition ———————-
โทษทีครับ พอดีมีคนมาเตือน ต้องขอบคุณมากเลยครับ ทั้งนี้ทั้งนั้น hooks จะยังใช้ไม่ได้จนกว่า เราจะ enable ครับ วิธีการก็คือ ไปแก้ที่ [CI]/application/config/config.php

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

4 Comments »

 
  • Jack says:

    อยากให้เปิดคอสสอนหน่อยคับ

  • albek says:

    อยากให้เปิดคอร์สสอนด้วยเหมือนกันครับ

    อยากเรียน cakephp , ajax

  • ninja says:

    ชื่อ preloadding ไม่ตรงกันนะครับแก้ให้ตรงกันทั้งสองที่
    และต้องเซ็ต $config['enable_hooks'] = TRUE;
    ที่ application/config/config.php ด้วยนะครับถึงจะรันได้

  • MellZ says:

    เราสามารถนำไปประยุคใช้ ในการตรวจสอบ username กับ การ login ใช้งาน web ได้ป่าวครับแบบนี้

 

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>