Контроллер расширения 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, как упоминалось выше.
спасибо,