Контроллер расширения Codeigniter, контроллер не найден

В Codeigniter 2.1.2 я хочу создать базовый контроллер и затем перейти от этого контроллера. Это не сработает, и я понятия не имею, почему и сейчас я отчаялся.

В \ application\core\MY_Base_Controller.php У меня есть следующее:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Base_Controller extends CI_Controller 
{
    function __construct()
    {
        parent::__construct();
...

В \ application\controllers\Home.php у меня есть:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Home extends MY_Base_Controller {

И сообщение об ошибке

Неустранимая ошибка: класс "MY_Base_Controller" не найден в... \application\controllers\Home.php в строке 3

Я понятия не имею, что делать, я читал по всему Интернету, что я должен поставить базовый контроллер в основную папку, что я сделал, что я должен назвать базовый контроллер с префиксом MY_, я сделал. Но он все еще не работает. И в моей config.php тоже эта строка

$config['subclass_prefix'] = 'MY_';

Im работает на localhost с помощью xampp

спасибо за помощь

РЕДАКТИРОВАТЬ

Может кто-то пожалуйста downlod после ссылки попробовать его, и скажите мне, что случилось. Я только что загрузил codeigniter, попытался создать базовый контроллер и расширить приветственный контроллер. Не работает. В следующем rar есть только измененные файлы. Спасибо http://goo.gl/sKHkDl

EDIT 2

Я могу получить эту работу, переименовав MY_Base_Controller в MY_Controller. Означает ли это, что я могу создать только один расширенный класс для контроллера? например. Я не могу

  • MY_Base_Auth_Controller
  • MY_Base_Article_Controller

Просто и только MY_Controller?

Ответ 1

У меня была та же проблема, но если бы я создал все контроллеры в файле MY_Controller.php, все сработало хорошо.

<?php

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        // do some stuff
    }
}

class MY_Auth_Controller extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
        // check if logged_in
   }
}

Ответ 2

У меня была такая же проблема в моем первом приложении CI и найдено два ключевых элемента, которые необходимо проверить:

1. Соответствие случая. В зависимости от конфигурации вашего сервера имя вашего файла в каталоге должно соответствовать случаю вашего класса. Например, если ваш класс называется "MY_Controller", ваше имя файла должно быть: "MY_Controller.php" на сервере Linux. Известно, что у серверов Windows есть проблемы с именами в верхнем регистре, поэтому вы можете экспериментировать с именем вашего контроллера "my_controller.php" и/или изменять расширение на "my_" в вашем config.php вместо "MY_",

2. Вставка функции автозагрузки По неизвестным мне причинам Codeigniter не распознает и не считывает расширенные основные классы до первой загрузки основного класса. Это может привести к неправильной загрузке вашего расширения. Чтобы исправить это, вы можете добавить этот простой сценарий автозагрузки в самую нижнюю часть вашего config.php

/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
            include $file;
        }
    }
}

Сторона примечания: решение выше было протестировано на CodeIgniter 2.1.4. Заданный вопрос касался CodeIgniter 2.1.2

Ответ 3

Любой, кто читает это, использует CI 3+ и пытается попытаться сделать то же самое. Обратите внимание, что глобальный EXT был обесценен при снижении поддержки php 4. Вы должны использовать следующее:

/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH . 'core/' . $class . '.php')) {
            include $file;
        }
    }
}

Ответ 5

Я столкнулся с такой же проблемой. Я думаю, проблема в том, что CI загружает только один файл, который должен называться "MY_controller.php". (system/core/Codeigniter.php - строка 238). Выполняется загрузка только "MY_Controller.php". Ответы, сделанные выше, такие как "_autoload", существуют потому, что мы переопределяем эту функциональность. Я думаю, что это как в CI -2, так и в CI - 3. Или мы можем вносить изменения в файлы ядра, или мы можем использовать функцию автозагрузки, как упомянуто выше.

благодаря,