Search code examples
phpcodeignitercodeigniter-2

Extending The Controller Class in CodeIgniter


I have class MY_Controller extends CI_Controller and common logic for big profile section, so I'va tried to create class Profile extends MY_Controller with common logic for profile section and all class related to this section should extends this Profile class as I understand right, but when I tried to create class Index extends Profile I recieve an error:

Fatal error: Class 'Profile' not found

CodeIgniter tries to find this class in index.php which I am running.

Where is my mistake? Or maybe there is anoter better way to mark out common logic?


Solution

  • 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();
        }
    ...
    }