Codeigniter 4 /CI4/ 使用数据库保存站点配置/ 如何使密钥和值在全球范围内可访问

Codeigniter 4 /CI4/ Using database to keep site configurations/ How to make key and value accessible globally

我有一个数据库,其中包含我站点的多个基本配置设置。这个想法是从数据库中提取值,然后使这些值可以在全球范围内访问。我还想实施 $this->cachePage(DAY); 以确保网站不会不断要求配置设置。

这是mysqltable

我已将以下代码放入 public function initController 方法中 基地控制器:

    $global_app_settings = array();
    
    $this->AppSettingModel        = new \App\Models\AppSettingModel;    
    
    $app_settings = $this->AppSettingModel->getAppSettings();
    
    foreach ($app_settings as $row) {
        $global_app_settings[$row->app_setting_key] = $row->app_setting_value;
    }

以上代码运行良好。如果我打印到屏幕,它会产生以下内容;

Array
(
[dh_company_name] => A Big Company
[dh_phone_number] => +81-3-5555-5555
[dh_fax_number] => +81-3-5555-5556
)

我的问题如下;

BaseControllerclass中定义一个受保护的变量并在initController

中设置它

将其放入您的控制器

public function __construct()
{
    this->cachePage(15);
}

其实很简单

public function loadGlobalSettings()
{
    $globalSettings = cache('global_settings');

    if (null === $globalSettings) {
        $appSettingModel = model('\App\Models\AppSettingModel');
        
        $app_settings = $appSettingModel->getAppSettings();
        $globalSettings = [];
    
        foreach ($app_settings as $row) {
            $globalSettings[$row->app_setting_key] = $row->app_setting_value;
        }
        
        cache()->save('global_settings', $globalSettings, DAY*15);
    }

    return $globalSettings;
}

运行方式:

  1. 尝试从缓存中获取。
  2. 如果缓存不存在(返回null),加载模型,获取设置,然后缓存它。
  3. Return 设置数组。

玩得开心!