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