CodeIgniter не может создать экземпляр модели, расширяющей абстрактную базовую модель

Я пытаюсь создать приложение в CodeIgniter, где каждый контроллер расширяет базовый контроллер с именем «Incyte_Controller.php» и где каждая модель расширяет базовую модель с именем «Incyte_Model.php».

Раньше я импортировал эти родительские классы в каждый дочерний класс, используя ‘require’, но хочу изменить это, так как он слишком избыточен для меня.
Поэтому я переместил базовые файлы в «application / core» и изменил префикс базового класса в Config.php с «MY_» на «Incyte_».

Теперь все контроллеры могут расширять ‘Incyte_Controller’ без использования ‘required’.

Но, как ни странно, когда приложение пытается загрузить модель это говорит:

Неустранимая ошибка: невозможно создать экземпляр абстрактного класса Incyte_Model в
/opt/lampp/htdocs/incyte/system/core/Common.php в строке 172

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

Я проверил на орфографические ошибки, в том числе заглавные буквы, но не нашел ни одного.

Кроме того, я должен отметить, что оба базовых класса являются абстрактными классами, потому что они не должны работать над собой (мои учителя, скорее всего, предпочли бы это)

Пожалуйста, поймите, я ЗНАЮ, что сами абстрактные классы не могут быть созданы, но классы, которые расширяют абстрактные классы, МОГУТ быть созданы, и это то, что я пытаюсь сделать. Но в одном случае, похоже, он не работает, а в другом очень похожий, но это странно.

Я надеюсь, что любой из вас может помочь

1

Решение

Лучший способ сделать это — расширить класс базовой модели на что-то вроде MY_Incyte_Model, а затем расширить его в ваших реальных моделях.

Так что вместо class AwesomeModel extends CI_Model вы можете иметь class AwesomeModel extends MY_Incyte_Model,

Узнайте больше здесь

https://ellislab.com/codeigniter/user-guide/general/core_classes.html

0

Другие решения

Идти к /opt/lampp/htdocs/incyte/system/core/Common.php и вы найдете строку, которая пытается сделать что-то вроде этого:

new Incyte_Model();

Incyte_Model класс является абстрактным (это означает, что он не может быть использован напрямую — его нужно разделить на подклассы).

Посмотрите, как PHP обрабатывает Объектно-ориентированный (ОО) код.

В частности, посмотрите на абстракции классов.

0