October 4, 2012

FuelPHPのFormatクラスのCSVで囲い文字をダブルクォートでは無くす方法(configファイル未使用)

以下、FuelPHP 1.3で確認しています。

囲い文字という表現が正しいかはさて置き、FuelPHPのFormatクラスは、
CSVの各値がダブルクォートで囲まれている事を前提にしています。

参考:
FuelPHP の Format クラスは CSV が「"」で囲まれることを前提にしている

ソースを見てみると、以下のConfig値が有りました。
* format.csv.newline
* format.csv.delimiter
* format.csv.enclosure
* format.csv.escape
* format.csv.regex_newline

囲い文字のダブルクォートはformat.csv.enclosureになります。

アプリ側で
Config::set('format.csv.enclosure', '')
しても、反応はありませんでした。

理由は、Format::_init()でConfig::load('format', true)している部分です。
アプリ側でsetした値が飛んでしまいます。

app/configディレクトリにformat.phpを置いても良いのですが、
どうも気が進まなかったので、以下の方法で半ば強引にねじ伏せてみました。

(1)
アプリ側でConfig::load('format'true)する。

(2)
アプリ側でConfig::set('format.csv.enclosure', '')する。

(3)
普通にFormatクラスを使う。
ex). $data = Format::forge($data, 'csv')->to_array();

これでOKです。

ポイントは
Config::load($file, $group = null, $reload = false, $overwrite = false)
の$overwriteはfalseがデフォルトである部分です。

アプリ側で先にConfig::load('format'true)して
Format::_init()でのConfig::load('format'true)を無効化する感じです。

--

2012/10/06 追記
$overwriteじゃなくて$reloadかも。

No comments:

Post a Comment