【问题标题】:Codeigniter 3: how can I avoid repeating this chunk of code in my controllers?Codeigniter 3:如何避免在我的控制器中重复这段代码?
【发布时间】:2019-04-07 07:46:10
【问题描述】:

我正在使用 Codeigniter 3.1.8 和 Bootstrap 4 开发一个基本的博客应用程序

所有控制器中存在几个实体(Login.php 和 Register.php 除外):静态数据、类别和页面。

$data = $this->Static_model->get_static_data();
$data['pages'] = $this->Pages_model->get_pages();
$data['categories'] = $this->Categories_model->get_categories();

此外,在大多数控制器中,上面的代码出现不止一次。

恐怕这是应用程序中唯一重复代码的情况。 (查看整个应用程序的当前状态,on my Github account)。

我正在寻找经验丰富的 PHP 开发人员提供的具体和/或一般性建议,以帮助我减少代码冗余并提高效率。

避免在我的控制器中重复上述代码的最佳方法是什么?

【问题讨论】:

  • 听起来像是一个代码审查问题
  • 我投票结束这个问题,因为这个问题属于代码审查
  • 我可以为你的项目做贡献吗? - 如果是这样,我可以根据需要进行一些更改 - 可能需要几天时间...

标签: php codeigniter codeigniter-3


【解决方案1】:

在CodeIgniter中可以通过如下路径创建核心控制器:

application/core/MY_Controller.php

然后您可以使用它来扩展您的控制器,例如:

class MY_Controller extends CI_Controller {
    public function __construct() {
         // your logic here
    }
}

class Pages extends MY_Controller {
    public function index() {
          // display all pages here
    }
}

除非您需要或覆盖某些内容,否则您不必在创建的每个类中都创建构造函数,并且如果您想要拥有全局数据,只需在您的核心控制器中创建一个受保护的属性并在其他类中使用它

例如:

// MY_Controller
protected $data;

public function __construct() {
    $this->data = $this->somemodel->get_static()
}

在你的控制器中你可以做这样的事情

public function index() {
   $this->data['pages'] = $this->pagesmodel->get_pages();
   $this->load->view('path/to/view', $this->data);
}

如果存在核心控制器会自动加载,只需创建文件并开始使用它。

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2017-06-16
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多