CodeIgniter Extending Multiple Controllers?
Assuming that you are using Codeigniter 2, this can be done by putting all you extended controller classes in the same file.
In /application/core create a file called MY_Controller.php (don't forget to check the subclass prefix in config.php around line 109)
In here you can add all you controller classes to extend. For example;
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');/** * MY_Controller Class * * * @package Project Name * @subpackage Controllers */class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); $this->form_validation->set_error_delimiters('<div class="form-error">', '</div>'); }}class LoggedIn extends MY_Controller { public function __construct() { parent::__construct(); if (is_logged_in() == FALSE) { $this->session->set_userdata('return_to', uri_string()); $this->session->set_flashdata('message', 'You need to log in.'); redirect('/home'); } }}class AdminLayout extends LoggedIn { public function __construct() { parent::__construct(); // do something }}class ModLayout extends LoggedIn { public function __construct() { parent::__construct(); // do something }}/* End of file *//* Location: ./application/core/ */
Then when you create your controllers as per normal, just choose the base controller class to extend. Example;
class Foo extends AdminLayout { public function __construct() { parent::__construct(); if (is_logged_in() == FALSE) { $this->session->set_userdata('return_to', uri_string()); $this->session->set_flashdata('message', 'You need to log in.'); redirect('/home'); } }}
or
class Bar extends ModLayout { public function __construct() { parent::__construct(); if (is_logged_in() == FALSE) { $this->session->set_userdata('return_to', uri_string()); $this->session->set_flashdata('message', 'You need to log in.'); redirect('/home'); } }}
PHP does not support multiple inheritance.You could use Codeigniter helpers or libraries for this.
Have a look at the library examples: