Расширение класса контроллера в CodeIgniter
У меня есть class MY_Controller extends CI_Controller
и общую логику для большого раздела профиля, поэтому я пытался создать class Profile extends MY_Controller
с общей логикой для раздела профиля, и весь класс, связанный с этим разделом, должен расширять этот класс профиля, насколько я понимаю, но когда Я попытался создать class Index extends Profile
Я получаю сообщение об ошибке:
Fatal error: Class 'Profile' not found
CodeIgniter пытается найти этот класс в index.php
который я запускаю.
Где моя ошибка? Или, может быть, есть более лучший способ выделить общую логику?
3 Solutions collect form web for “Расширение класса контроллера в CodeIgniter”
Полагаю, вы поместили свой MY_Controller в / application / core и задали префикс в конфиге. Однако я был бы осторожен в использовании индекса как имени класса. Как функция / метод в Codeigniter имеет особое поведение.
Если вы хотите расширить этот контроллер, вам нужно поместить классы в один и тот же файл.
Например, ядро ввода / приложения
/* start of php file */ class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); } ... } class another_controller extends MY_Controller { public function __construct() { parent::__construct(); } ... } /* end of php file */
В / приложение / контроллеры
class foo extends MY_Controller { public function __construct() { parent::__construct(); } ... }
или
class bar extends another_controller { public function __construct() { parent::__construct(); } ... }
Все классы, которые вы распространяете, должны жить в каталоге приложений / CORE, поэтому в вашем случае должны находиться как My_Controller, так и Profile. Все контроллеры «конечной точки» будут жить в папке приложений / контроллеров
ОБНОВИТЬ
Я стою исправлено. Расширенные классы должны жить в одном файле. @ Ответ Роунеля показывает, как реализовать
После некоторой борьбы с версией 3 и этой проблемой я решил, что это не плохое решение …
require_once BASEPATH.'core/Controller.php'; require_once APPPATH.'core/MYCI_Controller.php';
добавить эту вторую строку, где первая существует в системе / ядре / CodeIgniter.php
[Если не слишком поздно, я настоятельно рекомендую против php и / или CodeIgniter.]