Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call one controller function in another controller in codeigniter

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?

like image 925
user2936213 Avatar asked Jan 14 '14 09:01

user2936213


People also ask

Is it possible to call a controller from another controller in CodeIgniter?

call one controller to another controller. If you have functionality in controller A that you wish to use in controller B, then have B extend A, so that the function is then part of B. You mix up controllers and libraries.

Can we call one controller from another controller in Salesforce?

Controllers are apex classes so you just need to instantiate your second controller in the first, set whatever data you need to set and then call the method like any other class.


2 Answers

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
    }

}
like image 74
Kyslik Avatar answered Sep 20 '22 04:09

Kyslik


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 ;
}
like image 42
ReNiSh AR Avatar answered Sep 17 '22 04:09

ReNiSh AR