CodeIgniter Extending Multiple Controllers? CodeIgniter Extending Multiple Controllers? codeigniter codeigniter

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:

http://codeigniter.com/wiki/Simplelogin