35歳からの中二病エンジニア

社寺・鉄道・アニメを愛でるウェブ技術者の呟き

JMS Serializerのデバッグ設定でハマる

JMS SerializerはPHP標準のシリアライザーよりも強力なため重宝している。ただ、開発時にデバッグ設定にしたにも関わらずキャッシュが作成されてしまう現象に遭遇したので、備忘録がてら記載しておく。

ダメな例

以下は、キャッシュが作成されてしまう例である。 一見すると問題無さそうであるが…。

$isDebug = true;
$serializer = JMS\Serializer\SerializerBuilder::create()
    ->setCacheDir('/path/to/cache')
    ->setDebug($isDebug)
    ->build();

正しい例

実は、 setCacheDir() でキャッシュディレクトリーを指定してしまうと、デバッグ設定に関わらずキャッシュが作成される。そのため、以下のようにデバッグフラグが有効の場合のみキャッシュディレクトリーを指定すると、開発環境と本番環境の切り分けがうまくいくようになる。

$isDebug = true;
$serializer = JMS\Serializer\SerializerBuilder::create()
    ->setDebug($isDebug);
if ($isDebug !== true) {
    $serializer->setCacheDir('/path/to/cache')
}
$serializer->build();