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

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

на applicationcoreMY_Base_Controller.в PHP у меня есть это:

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

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

на applicationcontrollersHome.в PHP у меня есть это:

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

class Home extends MY_Base_Controller {

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

неустранимая ошибка: класс "MY_Base_Controller" не найден в ...приложениеконтроллерыГлавная.php on line 3

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

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

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

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

редактировать

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

Изменить 2

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

  • MY_Base_Auth_Controller
  • MY_Base_Article_Controller

только и всего MY_Controller ?

5 ответов


У меня была та же проблема, но если я создал все контроллеры в 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
   }
}

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

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

2. Вставьте функцию автозапуска По неизвестным мне причинам Codeigniter не распознает и не читает расширенные основные классы перед первой загрузкой основного класса. Это может вызвать проблемы с расширением не загружается правильно. Чтобы исправить это, вы можете добавить этот простой скрипт автозапуска в самую нижнюю часть вашего конфиг.в 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


любой, кто читает это с помощью 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;
        }
    }
}

да, с классами core MY_ вы можете переопределять только сущности Codeigniter framework, такие как Controller, Model, Config, Exception и так далее. Пожалуйста, обратитесь к https://ellislab.com/codeigniter/user-guide/general/core_classes.html


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

спасибо,