Extending The Controller Class in CodeIgniter
I take it you have put your MY_Controller in /application/core, and set the prefix in the config.I would be careful about using index as a class name though. As a function/method in Codeigniter it has a dedicated behaviour.
If you then want to extend that controller you need to put the classes in the same file.
E.g. In /application core
/* 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 */
In /application/controllers
class foo extends MY_Controller { public function __construct() { parent::__construct(); }...}
or
class bar extends another_controller { public function __construct() { parent::__construct(); }...}
I found this page on Google because I had the same problem. I didn't like the answers listed here so I created my own solution.
1) Place your parent class in the core
folder.
2) Place an include statement at the beginning of all classes that include the parent class.
So a typical controller might look like this:
<?phprequire_once APPPATH . 'core/Your_Base_Class.php';// must use require_once instead of include or you will get an error when loading 404 pagesclass NormalController extends Your_Base_Class{ public function __construct() { parent::__construct(); // authentication/permissions code, or whatever you want to put here } // your methods go here}
The reason I like this solution is, the whole point of creating a parent class is to cut down on code repetition. So I don't like the other answer that suggested copy/pasting the parent class into all of your controller classes.
It is possible with Codeigniter 3. Just including the parent file is enough.
require_once(APPPATH."controllers/MyParentController.php");class MyChildController extends MyParentController {...