9

I have one controller named home.php in which a function named podetails is there. I want to call this function in another controller user.php.
Is it possible to do so? I have read about HMVC in CI, but I want to know is it possible to do without using hmvc?

10
  • explain with example and use Commented Jan 14, 2014 at 9:44
  • 5
    I have explained it very clearly. Please read the question again. Commented Jan 14, 2014 at 9:45
  • please specify what is the use? Commented Jan 14, 2014 at 9:51
  • 1
    I just want to use that function in user.php controller. thats it. Commented Jan 14, 2014 at 9:52
  • 7
    So you are using common code for both controllers. Then you make it as library function / or helper function. You can call anywhere in project. Commented Jan 14, 2014 at 10:07

2 Answers 2

12

To extend controller please either follow this tutorial or see some code below.


differences between private/public/protected


make a file in folder /application/core/ named MY_Controller.php

Within that file have some code like

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Controller extends CI_Controller {

    protected $data = Array(); //protected variables goes here its declaration

    function __construct() {

        parent::__construct();
        $this->output->enable_profiler(FALSE); // I keep this here so I dont have to manualy edit each controller to see profiler or not        
        $this->load->model('some_model'); //this can be also done in autoload...
        //load helpers and everything here like form_helper etc
    }

    protected function protectedOne() {

    }

    public function publicOne() {

    }

    private function _privateOne() {

    }

    protected function render($view_file) {

        $this->load->view('header_view');
        if ($this->_is_admin()) $this->load->view('admin_menu_view');

        $this->load->view($view_file . '_view', $this->data); //note all my view files are named <name>_view.php
        $this->load->view('footer_view');

    }

    private function _isAdmin() {

        return TRUE;

    }

}

and now in any of yours existing controllers just edit 1st or 2nd line where

class <controller_name> extends MY_Controller {

and you are done

also note that all your variables that are meant to be used in view are in this variable (array) $this->data

example of some controller that is extended by MY_Controller

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class About extends MY_Controller {

    public function __construct() {

        parent::__construct();

    }

    public function index() {
        $this->data['today'] = date('Y-m-d'); //in view it will be $today;
        $this->render('page/about_us'); //calling common function declared in MY_Controller
    }

}
Sign up to request clarification or add additional context in comments.

Comments

2

write the podetails() as a function within a helper file.

then load that helper in both of the controllers.

in the controller you just call podetails()

Suppose:

--controller 1--

function podetails()
{
   podetails(); // will call function in helper ;
}

--controller 2--

function podetails()
{
   podetails(); // will call function in helper ;
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.