CodeIgniter: คลาส Librariy ไม่โหลดด้วยรหัสนี้

ฉันเพิ่งเริ่มใช้ CodeIgniter และได้ติดตามบทช่วยสอนระดับพรีเมียมของ Nettuts วิธีสร้าง CMS ใน Codeigniter

อันดับแรก ไดเรกทอรี แอปพลิเคชัน และ ระบบ ของฉันอยู่บนเส้นทางที่แตกต่างกันจาก public_html และกำหนดเส้นทางในไฟล์ config.php

ฉันได้สร้างสองไฟล์ Frontend_Controller.php และ Admin_Controller.php และภายในไฟล์เหล่านั้นสร้างคลาสดังต่อไปนี้

แอปพลิเคชัน/My_Controller.php

class MY_Controller extends CI_Controller
{

    public $data = array();

    function __construct()
    {
        parent::__construct();

        $this->data['errors'] = array();
        $this->data['site_name'] = config_item('site_name');
    }
}

ไลบรารี/Frontend_Controller.php

class Frontend_Controller extends MY_Controller
{

    function __construct()
    {
        parent::__construct();
    }
}

ไลบรารี/Admin_Controller.php

class Admin_Controller extends MY_Controller
{

    function __construct()
    {
        parent::__construct();
    }
}

ตอนนี้เมื่อฉันพยายามโหลดคลาสเหนืออัตโนมัติโดยการเขียนฟังก์ชัน __autoload() ลงในไฟล์ config.php แต่มันไม่โหลดไฟล์/คลาส

config.php

function __autoload($classname)
{
    if(strpos($classname, 'CI_' !== 0))
    {
        $file = APPPATH . 'libraries/' . $classname . '.php';

        if(file_exists($file) && is_file($file))
        {
            @include_once($file);
        }
    }
}

ใครสามารถช่วยฉันเข้าใจและแก้ไขปัญหาได้ ... ขอบคุณมาก


person Code Lover    schedule 20.11.2013    source แหล่งที่มา
comment
ทำไมไม่ใช้การโหลดอัตโนมัติของ CI ทำไมคุณถึงโหลดคลาสภายใน config?   -  person Damien Pirsy    schedule 20.11.2013
comment
โอ้! ฉันไม่ค่อยตระหนักกับมันมากนัก คุณช่วยสอนฉันหน่อยได้ไหมว่าต้องทำอย่างไร?   -  person Code Lover    schedule 20.11.2013
comment
คุณอ่านเอกสารแล้วหรือยัง? มันค่อนข้างดี ฉันแน่ใจว่ามันจะตอบคำถามของคุณ ตามคำแนะนำส่วนตัว คุณควรอ่านเอกสารเฟรมเวิร์ก/ไลบรารีก่อนใช้งาน...   -  person Damien Pirsy    schedule 20.11.2013
comment
ใช่ ฉันได้อ่านเอกสารแล้ว และจำเป็นต้องกำหนดใน autoload.php แต่ฉันยังสับสนว่าจะเขียนชื่อคลาสอย่างไร และอยู่ที่ไหน เนื่องจากฉันมีคลาสคอนโทรลเลอร์ในไลบรารีที่มีข้อความเป็นตัวพิมพ์ใหญ่ด้วย   -  person Code Lover    schedule 20.11.2013


คำตอบ (1)


คุณสามารถลองใช้ Codeigniter autoload ในไฟล์ application/config/autoload.php ได้ดังนี้:

`$autoload['libraries'] = array('database', 'session');`

สำหรับรายละเอียด โปรดดูที่นี่: http://ellislab.com/codeigniter%20/user-guide/general/autoloader.html

คุณสามารถลองใช้สิ่งนี้ได้:

ตัวอย่างด้านล่างจะดูตำแหน่งต่อไปนี้สำหรับชื่อไฟล์ตัวพิมพ์เล็ก: core/ libraries/ models/

function __autoload($class) 
{
  $path = array('core', 'libraries', 'models');

  if(strpos($class, 'CI_') !== 0) {
    foreach($path as $dir) {
      if (file_exists(APPPATH.$dir.'/'.strtolower($class).'.php'))
        include_once(APPPATH.$dir.'/'.strtolower($class).'.php');
    }
  }
}
person Suvash sarker    schedule 20.11.2013
comment
ขอบคุณสำหรับคำตอบ .. หนึ่งคำถามกับสิ่งนี้ .. เมื่อฉันใช้ $autoload['libraries'] ฉันจะเขียน Frontend_Controller ลงในอาร์เรย์ได้อย่างไร array('frontend') จริงไหม? - person Code Lover; 20.11.2013
comment
Frontend_Controller ไม่ใช่ไลบรารี ฉันเดาว่า...คุณไม่โหลดคอนโทรลเลอร์อัตโนมัติ! - person Damien Pirsy; 20.11.2013
comment
นั่นคือคลาสไฟล์ของฉันเอง .. โปรดดูในคำถามของฉัน .. แล้วฉันจะโหลดคลาสนั้นได้อย่างไร CI อาจจะดีแต่การทำความเข้าใจก็น่าสับสนมาก อย่างน้อยสำหรับผู้เริ่มต้นเช่นฉัน.. :( - person Code Lover; 20.11.2013
comment
ดูที่นี่ ellislab.com/codeigniter%20/user-guide/ ทั่วไป/ - person Suvash sarker; 20.11.2013
comment
ดูที่นี่ด้วย: ellislab.com/codeigniter%20/user- guide/general/libraries.html - person Suvash sarker; 20.11.2013