在代码点火器中使用通用功能(控制器)

时间:2015-09-23 15:39:02

标签: php codeigniter oop model-view-controller

我正在使用Code Igniter作为我正在处理的项目的框架。我对MVC世界有点新意,但我一边学习。

在我的项目中,我有一个前端控制器和一个后端管理控制器。

在前端,我有一个注册表单,其中有大约5个下拉列表,由数据库调用填充。在管理方面,我会显示用户提交的记录,并在选择的下拉列表中预先选择该选项。

为了做到这一点,我还必须在管理控制器中填充下拉列表。

这是我的问题发挥作用的地方。在这样的场景中,我在前端控制器和管理控制器中基本上有3个相同的功能。

如何创建这两个控制器都可以访问的公共控制器或控制器?

以下是共享功能的示例:

public function fetchSites($org = null)
{
    if (!$org) {
        if (null !== $this->input->post('org')) {
            $sites = $this->support_model->getSites($this->input->post('org'));
            header('Content-Type: application/json');
            echo json_encode($sites);
        }
    } else {
        $sites = $this->support_model->getSites($org);
        return $sites;
    }
}

前端和后端共享相同的型号,只是不同的控制器。

我考虑在application/core中创建一个控制器,但我无法弄清楚如何从该控制器访问数据。

1 个答案:

答案 0 :(得分:0)

您可以轻松地创建帮助程序并从两个控制器中调用它,这样您就不会重复代码。

您的帮助文件中包含此内容:

function sharedFunctionality($org = null)
{
   $CI = & get_instance();
   $CI->load->model('path/to/support_model');
   if (!$org){
      $sites = $CI->support_model->getSites($CI->input->post('org'));
      header('Content-Type: application/json');
      echo json_encode($sites);
   } else {
      $sites = $CI->support_model->getSites($org);
      return $sites;
}
}

在两个控制器中,您只需要调用辅助函数,然后调用函数:

$this->load->helper('nameOfHelper');
$sites = sharedFunctionality($this->input->post('field'));

创建帮助文件的更多信息: https://ellislab.com/codeigniter/user-guide/general/helpers.html