CodeIgniter设置数组中的配置项

时间:2011-07-14 00:49:29

标签: codeigniter

所以我刚开始使用CodeIgniter ......并且陷入设置配置项

我已经读过,替换配置项的值就像这样简单:

$this->config->set_item('item_name', 'item_value');

但是如果我想设置配置项是配置项数组的一部分呢...就像这样:

$api_config = $this->config->load('api'); //loading the created configuration under config folder

api.php

$facebook['app_id'] = '123213213';
$facebook['api_key'] = '123123WERWERWE123123';

$config['facebook'] = $facebook;

我想动态替换app_id。

3 个答案:

答案 0 :(得分:1)

当然可以这样做,但您需要手动解包/重新包装配置项。例如,给定此配置文件:

$f['a'] = "1";
$f['b'] = "2";

$config['t'] = $f;

这个控制器功能:

function t()
  {
    var_dump($this->config->item("t"));
    echo "<br>";
    $v = $this->config->item("t");
    $v['a'] = "3";
    $this->config->set_item('t', $v);
    var_dump($this->config->item("t"));
  }

您将获得此输出:

array(2) { ["a"]=> string(1) "1" ["b"]=> string(1) "2" }
array(2) { ["a"]=> string(1) "3" ["b"]=> string(1) "2" } 

有一点需要注意:文件中的实际配置值没有改变:您需要在每个请求上重新应用更改。

答案 1 :(得分:0)

不幸的是,由于你现在拥有的东西,你不能这样做。

查看相关代码:

// from CI 2, CI 1 has no differences which will effect the current situation
include($file_path);

if ( ! isset($config) OR ! is_array($config))
{
    if ($fail_gracefully === TRUE)
    {
        return FALSE;
    }
    show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.');
}

if ($use_sections === TRUE)
{
    if (isset($this->config[$file]))
    {
        $this->config[$file] = array_merge($this->config[$file], $config);
    }
    else
    {
        $this->config[$file] = $config;
    }
}
else
{
    $this->config = array_merge($this->config, $config);
}

如您所见,从配置文件中选取的唯一值是$config。 CI几乎丢弃了其他一切。您不应该通过配置来读取或写入该值。

您的选择是您可以拥有一个facebook配置文件,您可以将facebook数组存储为api配置文件中$ config变量中的值,或者您可以将值存储为某些特殊键,例如'facebook_app_id'同一个文件。您必须决定哪个选项最适合您的需求,但我倾向于将值存储为'facebook_app_id'。

答案 2 :(得分:0)

$this->config->load('api', true);//load config first

//begin set new value

$this->config->set_item('app_Ckey',‘your new value’);
$this->config->set_item('app_id',‘your new value’);

$this->load->library('api');

echo $this->config->item('app_Ckey');