【问题标题】:Codeigniter Template EngineCodeigniter 模板引擎
【发布时间】:2013-03-25 08:42:25
【问题描述】:

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

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

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

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

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

我听说使用 setflash .. 但问题是如果用户访问 msn 页面而不访问 google 会怎样

那么有什么方法可以获取 google 控制器数据吗?

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

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

【问题讨论】:

    标签: php codeigniter templates


    【解决方案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');),这将非常有效。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      嗯...我认为您不会在 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);
          }
      
      }
      

      【讨论】:

      • 如果数据变量是动态的怎么办?
      • 好吧 - 您在问题中没有提到任何有关动态数据的内容 - 但是,您仍然可以从 MY_conrroller 中的数据库中获取数据。
      猜你喜欢
      • 2016-09-04
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多