如何在PHP Codeigniter中访问兄弟控制器功能

时间:2014-06-17 16:29:14

标签: php codeigniter inheritance

我有以下控制器结构: enter image description here

使用以下代码:

主控制器:

  class MY_Controller extends CI_Controller {

      public function __construct() {
        parent::__construct();
        $this->load_defaults();
      }

      public function load_defaults() {

      }

   }

儿童控制器1:

class Child1 extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->main();
    }

    public function main() {
        echo "function in Child Controller 1";
    }
}

儿童控制器2:

class Child2 extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->main();
    }

    public function main() {
        echo "function in Child Controller 2";
    }
}

我的问题:如何从Child2控制器调用位于Child1控制器中的函数?

2 个答案:

答案 0 :(得分:2)

如果你必须从另一个控制器调用控制器,那你就错了。控制器可以接受来自客户端的URI请求。

请尝试重新审视问题并查看是否可以将公共逻辑移动到MY_Controller - 它将是可访问的,因为所有其他控制器都会扩展它。

此外,模型将是具有将从控制器调用的常用功能的好地方。

答案 1 :(得分:-1)

我认为你要找的是redirect。考虑到通过CI约定,每个控制器功能应该是用户的端点,如果您想从另一个控制器访问某个功能,那么您真正尝试做的是将它们重定向到该控制器。

function someEndPoint(){
    $this->load->helper('url');
    redirect('someOtherEndPoint', 'refresh');
}