CodeIgniter Настройка элемента конфигурации, который находится в массиве - PullRequest
2 голосов
/ 14 июля 2011

Итак, я только начал использовать 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 ]

1 голос
/ 14 июля 2011

Конечно, вы можете сделать это, но вам нужно будет вручную развернуть / перемотать элемент конфигурации.Например, учитывая этот файл конфигурации:

$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" } 

Одна вещь, которую нужно отметить: фактическое значение конфигурации в файле не изменилось: вам придется повторно применять ваше изменение к каждому запросу.

0 голосов
/ 10 октября 2013
$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');
0 голосов
/ 14 июля 2011

К сожалению, вы не можете сделать это, поскольку у вас есть вещи прямо сейчас.

Посмотрите на рассматриваемый код:

// 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 как значение в переменной $ config вКонфигурационный файл API, или вы можете сохранить значение в виде специального ключа, такого как «facebook_app_id» в том же файле.Вам нужно будет решить, какой вариант лучше подходит для ваших нужд, но я бы предпочел сохранить значение как «facebook_app_id».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...