รักสามเศร้าในไฟล์ /system/codeigniter/Common.php
ในฟังก์ชัน load_class ตรงส่วนที่เป็นการตัดสินใจว่าจะดึง library จากใน BASEPATH หรือ APPPATH มีโค๊ดตามนี้
if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT)) { require(BASEPATH.'libraries/'.$class.EXT); require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT); $is_subclass = TRUE; } else { if (file_exists(APPPATH.'libraries/'.$class.EXT)) { require(APPPATH.'libraries/'.$class.EXT); $is_subclass = FALSE; } else { require(BASEPATH.'libraries/'.$class.EXT); $is_subclass = FALSE; } }
จะเห็นว่าถ้ามี MY_Loader.php อยู่ใน /system/application/libraries/ ก็จะเข้าที่เงื่อนไขแรกเลย. ซึ่งมันจะโหลด Loader.php ซึ่งอยู่ใน /system/libraries/ โดยไม่สนว่าจะมี Loader.php อยู่ใน /system/application/libraries/ หรือไม่ ทั้งๆ ที่จริงๆ แล้วควรให้ความสำคัญกับ Loader ที่อยู่ใน APPPATH ก่อน BASEPATH. ตรงนี้ผมก็ไม่แน่ใจเหมือนกันว่าจุดประสงค์ที่แท้จริงของเงื่อนไขนี้คืออะไร แต่มันไม่ตรงกับความต้องการของผม ก็เลยต้องจัดการปรับเปลี่ยนเล็กน้อย เป็นแบบนี้แทนครับ
if (file_exists(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT)) { if (file_exists(APPPATH.'libraries/'.$class.EXT)) require(APPPATH.'libraries/'.$class.EXT); else require(BASEPATH.'libraries/'.$class.EXT); require(BASEPATH.'libraries/'.$class.EXT); require(APPPATH.'libraries/'.config_item('subclass_prefix').$class.EXT); $is_subclass = TRUE; } else { if (file_exists(APPPATH.'libraries/'.$class.EXT)) { require(APPPATH.'libraries/'.$class.EXT); $is_subclass = FALSE; } else { require(BASEPATH.'libraries/'.$class.EXT); $is_subclass = FALSE; } }