CodeIgniter 2: How to extend CI_Controller multiple times?
What you're doing is correct. You just need all of these files in the application/core
directory. Here's a post by Phil Sturgeon regarding just this:
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
http://philsturgeon.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY/
The trick is to use the __autoload()
function - which Phil describes in his post.
if you want to extend another class instead of CI_controller you must include the target class. for example
include 'auth.php';
class test extends Auth
This is pretty easy. Do the following:
- Go to the following directory:
your_ci_app/application/core/
and create a php file calledMY_Controller.php
(this file will be where your top parent classes will reside) Open this the file you just created and add your multiple classes, like so:
class Admin_Parent extends CI_Controller { public function __construct() { parent::__construct(); } public function test() { var_dump("from Admin_Parent"); } } class User_Parent extends CI_Controller { public function __construct() { parent::__construct(); } public function test(){ var_dump("from User_Parent"); } }
Create your children controllers under this directory
your_ci_app/application/controllers/
. I will call itadminchild.php
Open
adminchild.php
and create your controller code, make sure to extend the name of the parent class, like so:class Adminchild extends Admin_Parent { function __construct() { parent::__construct(); } function test() { parent::test(); } }
You just put both in the same file, I have a project that is exactly the same as this.
We just have both the admin and normal extended controller in the MY_Controller.php
file, works fine.
The main reason for the MY_Controller
or other extended files is so that CodeIgniter auto initiates them when you load the base file (whether library, helper, etc.), you can have many classes in these files.
Edit:
You don't even need to call them MY_Admin_Controller
or MY_Controller
, we have Admin_Controller
and User_Controller
and Ajax_Controller
in the MY_Controller
File