config.php
$config['target'] = [
'foo' => ['foo1', 'foo2'],
'bar' => ['bar1', 'bar2']
];
こんな設定を用意しておいて、利用したいところで
Configure::load('config');
$config = Configure::read('target');
ってコードで読み取りすることってあると思うんですが、これ、複数実行すると配列が増えます!(゜ロ゜)
Configure::load('config');
$config = Configure::read('target');
debug($config);
Configure::load('config');
$config = Configure::read('target');
debug($config);
/*
ここでは
[
'foo' => ['foo1', 'foo2', 'foo1', 'foo2'],
'bar' => ['bar1', 'bar2', 'bar1', 'bar2']
]
*/
少しコードみただけですが、Configure::load()内でHash::merge()実行してるようなので、連想配列なら上書き、数値添えの配列なら追加になるんだと思われます。
複数のテストを連続実行させたらConfigure::load()で同名ファイル読みこみを複数実行したようで、発見できました。
というわけでCakePHP2でCongigure::read()つかうときは、列挙したいだけでも数値添え字配列は避けた方が良さそうです。
さっきのコードなら
config.php
$config['target'] = [
'foo' => ['foo1' => 'foo1', 'foo2' => 'foo2'],
'bar' => ['bar1' => 'bar1', 'bar2' => 'bar2']
];
とするか
config.php
$config['target'] = [
'foo' => ['foo1' => true, 'foo2' => true],
'bar' => ['bar1' => true, 'bar2' => true]
];
こんな感じにして array_keys
で読むかってところでしょうか。
追記
config.php
if (!Configure::check('target')){
$config['target'] = [
'foo' => ['foo1', 'foo2'],
'bar' => ['bar1', 'bar2']
];
}
これもありか
あるいはloadの第3引数がマージオプションになってるようなのでそっちで
Configure::load('config', 'default', false);
うん。どれもスッキリしない^^;