如何在codeigniter中调用另一个控制器中的一个控制器功能

时间:2014-01-14 09:42:28

标签: php codeigniter

我有一个名为home.php的控制器,其中有一个名为podetails的函数。我想在另一个控制器user.php中调用此函数 有可能这样做吗?我在CI中读过HMVC,但我想知道是否可以不使用hmvc?

2 个答案:

答案 0 :(得分:11)

要扩展控制器,请按照此tutorial或查看下面的代码。


private/public/protected

之间的差异

在名为/application/core/

的文件夹MY_Controller.php中创建一个文件

在该文件中有一些代码,如

<?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;

    }

}

现在你现有的任何控制器只需编辑第一行或第二行

class <controller_name> extends MY_Controller {

你完成了

另请注意,要在视图中使用的所有变量都在此变量(array) $this->data

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
    }

}

答案 1 :(得分:2)

podetails()写为辅助文件中的函数。

然后在两个控制器中加载该帮助器。

在控制器中你只需要调用podetails()

假设:

- 控制器1 -

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

- 控制器2 -

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