CodeIgniter: класс библиотеки не загружается с этим кодом

Я новичок в CodeIgniter и следую одному премиальному руководству Nettuts по созданию CMS в codeigniter.

Самые первые мои каталоги application и system лежат по разным путям из public_html и задают путь в файле config.php.

Я создал два файла Frontend_Controller.php и Admin_Controller.php и в этих файлах создал класс, как показано ниже.

application/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? почему вы загружаете классы внутри конфига??   -  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 в файле 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- руководство/общие/библиотеки.html - person Suvash sarker; 20.11.2013