codeigniter:如何减少负载

时间:2018-01-18 17:23:41

标签: php codeigniter

问题:我有一个存储用户设置的表。每个控制器的功能都需要在执行前检查此设置,以验证此功能的用户设置。

我的解决方案:我创建了一个我在自动加载器中加载的模型,在此模型中,有一个函数check_user_setting(),用于检查该用户的此功能的用户设置。每次调用函数时都会生成数据库,并根据设置返回TRUEFALSE

预期的解决方案:每次检查用户设置表单数据库时它连接到数据库并获取数据(这很耗时)我想一次从数据库中获取数据并执行此操作存储此数组并基于此数组,它检查每个函数的设置。我存储此数组的方式和位置,该值对于该系统将保持静态。我怎样才能做到这一点?或者有更好的方法。

3 个答案:

答案 0 :(得分:0)

您可以在codeigniter中使用查询缓存。 Query caching

答案 1 :(得分:0)

几个月前我遇到了类似的问题,基本上需要根据用户(users表)的一些值来过滤查询。 我所做的是存储那些"设置"在会议中

$this->session->settingArray = $settingsFromDatabase;
$this->session->otherConstantStuffInTheSession = $arrayFromDb;

希望我的回答能帮到你。

答案 2 :(得分:0)

基本控制器是一种可能的解决方案。基数可能类似于

class MY_Controller extends CI_Controller
{

  protected $user = [];

  public function __construct()
  {
    parent::__construct();
    $this->load->model('user_settings');
    $this->user = $this->user_settings->getUserSettings($id);
  }

}

使用MY_Controller扩展需要访问用户设置的任何控制器。

因此,如果getUserSettings($)返回array("id"=>'dave'),并且控制器Test如此延伸MY_Controller

class Test extends MY_Controller
{
    public function index()
    {
        echo $this->user['id'];
    }
}

http://example.com/test的请求将输出" dave"。

MY_Controller.php应位于 / application / core / 中,config.php应包含此设置

$config['subclass_prefix'] = 'MY_';