รักสามเศร้าในไฟล์ /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;
}
}