В 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_Controller ?
У меня была та же проблема, но если бы я создал все контроллеры в файле 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_» в вашем 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
Любой, кто читает это, использует 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; } } }
Да, с ядрами MY_ классов вы можете переопределить ТОЛЬКО объектные объекты codeigniter, такие как Controller, Model, Config, Exception и т. Д. См. https://ellislab.com/codeigniter/user-guide/general/core_classes.html.
Я столкнулся с такой же проблемой. Я думаю, проблема в том, что CI загружает только один файл, который должен называться «MY_controller.php». (system / core / Codeigniter.php – строка 238). Выполняется загрузка только «MY_Controller.php». Ответы, сделанные выше, такие как «_autoload», существуют потому, что мы переопределяем эту функциональность. Я думаю, что это как в CI -2, так и в CI – 3. Или мы можем вносить изменения в файлы ядра, или мы можем использовать функцию автозагрузки, как упомянуто выше.
благодаря,