memocon プログラミングのメモや物欲日記、雑記等

FuelPHPでのConfigの挙動ではまった

2013年08月13日 16時28分

久々FuelPHPネタ。
今回、はまったのはConfigクラス。

なーにも考えずにDBの設定読み込みたいなと思った時に以下のように書きました。

ここまでの挙動は問題なかったんですがこれやるとフレームワーク側の動きが正常に動かなくなります。

上のケースだとModel::find()とかでエラーが発生するようになります。
こんな感じのエラーです。

Error!
Fuel\Core\FuelException [ Error ]: Database type not defined in configuration

ググってみると「これは正しくdb.configが設定できてないよ」ってページが出てきます。
ですが一部でしか発症しない今回のケースは当てはまりません。

configが正しく読み込めないってことだけは分かったのでConfig::loadを調べてみます。

本家
http://fuelphp.com/docs/classes/config.html#/method_load
日本語(有志の方々に感謝)
http://fuelphp.jp/docs/1.6/classes/config.html#/method_load

第2引数のgroupがデフォルトのnullの場合、rootにマージされるようです。

それを踏まえたうえでエラーが発生した辺りのcore/classes/database/connection.php を覗いてみると以下のように記述されています。

$configが取れてないようです。

試しに以下のようなテストを書いてみました。


結論

ということで一度Config::load(‘db’)すると再度Config::load(‘db’, true)しても既に読み込み済みという判断になり、Config::get(‘db.xxxxx’)というグループ化した読み込みが出来ないのが原因でした。

Configクラスのファイル既読判定にグループが含まれていないので今回の現象が発生します。
第3引数のreloadをtrueにすると再読み込みされますが、今回はフレームワーク側で発生しているのでこの回避方法は使えませんね。

知らないとはまりそうな挙動でした。