1

假设我有一个类名为“ google ”的控制器,它包含一些数据示例

// 应用程序/控制器/google.php

$data = array(
    'target' => 'earth',
    'percentage' => 70
);

它的视图文件是 ' google_view.php ' // application/view/google_view.php

在第二个名为“ msn ”的控制器中,我想获取“ google ”控制器数据..或者我只想包含“ google_view ”文件而不$data再次传递变量

我听说使用 setflash .. 但问题是如果用户访问 msn 页面而不访问谷歌怎么办

那么有没有办法获取谷歌控制器数据?

我还检查了 opencart cms 及其控制器中的 MVC 框架,我们可以调用另一个控制器,如下所示。在下面的代码中,我们可以调用标头控制器。

$this->children = array(
    'common/column_left',
    'common/column_right',
    'common/content_top',
    'common/content_bottom',
    'common/footer',
    'common/header'
);
4

2 回答 2

1

您正在寻找 HMVC 功能,而 CodeIgniter 并没有真正做到。看看这个在 CI 中实现它的库:https ://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc 。网上有很多资源可以更详细地解释 HMVC 与 MVC。

如果您在任何规模上做这种事情,CodeIgniter 可能不是您的应用程序的最佳框架 - 值得看看其他一些框架。我现在使用了很多Laravel,如果你只是想获取另一个控制器的输出(例如,在 Laravel 中你只是去$second_controller_output = Route::forward('GET','other/controller');),它会非常好用。

希望有帮助!

于 2013-04-01T20:19:14.217 回答
0

嗯......我不认为你在 CI 中这样做,但我会提出一个想法......

扩展 Controller 核心类,然后确保在应用程序控制器的构造函数中扩展新类。例如

class MY_Controller extends CI_Controller {

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

        $this->default_data_google = array(
            'target' => 'earth',
            'percentage' => 70
        );
    }

}

class Google extends MY_Controller {

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

    public function index() {
        $data = $this->default_data_google;
        $this->load->view('google_view', $data);
    }

}

//

..

class Msn extends MY_Controller {

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

    public function index() {
        $data = $this->default_data_google;
        $this->load->view('google_view', $data);
    }

}
于 2013-03-25T08:50:40.860 回答