如何使用CI3 + HMVC调用控制器内的另一个模块控制器?

时间:2015-10-28 02:38:03

标签: php hmvc codeigniter-3

我在我的简单项目中使用HMVC,但我不知道如何在控制器内调用它们。

这是我的设置

- modules
  - common
    - controllers
      - header
      - footer
    - views
      - header
      - footer
  - foo
    - controllers
      - foo
    - views
      - foo

我的页眉和页脚控制器:

class Header extends MX_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {

        $data['title'] = "Welcome to HMVC!";

        $this->load->view('header', $data);

    }

}

class Footer extends MX_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {

        $data['links'] = array('link1', 'link2', 'link3', 'link4', 'link5', 'link6');

        $this->load->view('footer', $data);

    }

}

我的页眉和页脚视图很简单:

<!DOCTYPE html>
<html>
    <head>
        <title><?php echo $title; ?></title>
    </head>
    <body>
        <div class="container"><!-- main wrapper -->

...

    <ul style="list-style: none">
        <?php foreach($links as $link) { ?>
            <li><?php echo $link; ?></li>
        <?php } ?>
        </ul>
        </div><!-- end of main wrapper -->
    </body>
</html>

在我的foo控制器中,我称之为:

    public function __construct() {
        parent::__construct();
        $this->load->model('M_Foo');
    }

    public function index()
    {
        $data['test'] = $this->M_Foo->sampleQuery();

        Modules::run('common/header', $data);
        Modules::run('common/footer', $data);

        $this->load->view('foo_message', $data);


    }

如何在控制器内调用它们? 我是HMVC的新手。

1 个答案:

答案 0 :(得分:3)

我遇到质量极高的问题是非常罕见的,如果可以的话,我会两次提出你的问题。我对HMVC没有任何经验,只是在黑暗中拍摄,但如果你尝试引用方法而不是控制器会发生什么?

Modules::run('common/header/index', $data);
Modules::run('common/footer/index', $data);

如果这不起作用,也请试一试:

$this->load->module('common');
$this->header->index();
$this->footer->index();