Laravel5、dotEnvで配列取得

タグ: Laravel5  

秘密情報や環境に依存する情報を保存しておく.envに配列が使えないと阿鼻叫喚の声が聞こえる今日この頃、皆さんいかがお過ごしでしょうか。

ここは一つクールダウンで。Laravelが動いているのはなんでしたっけ?落ち着いて思い出しましょう。そうです。その柔軟すぎる柔軟性故にdisられる、The PHPです。

phpdotenvに能力が少なくても、PHPが柔軟であることを思い出しましょう。

例えば、app.phpにこんないたずらをして:

# app.phpの一番最後
'追加設定' => json_decode(getenv('MORE_CONFIG'), true),

.envには、こんな追加をします。

MORE_CONFIG=["item1":"value1","item2":"value2"],

JSONで配列を書いておいて、json_decodeでPHPの配列に戻しているだけです。柔軟です。PHPです。

これで、Config::get('app.追加設定')で、追加した配列が取れますし、そのitem1の値だけを取得したければ、Config::get('app.追加設定.item1')です。これで、"value1"が取得できます。簡単です。(PHPが柔軟であることを思い出してもらうため、わざと日本語のアイテム使っています。)

「これじゃ、一次配列に直接追加できないじゃないかよ。」

ほらほら、思い出して。PHPは柔軟ですよ。

app.phpの一番下の行をちょっとごちゃごちゃしましょう。

];

これにちょい足しします。

]+json_decode(getenv('MORE_CONFIG'), true);

エクセレンツ!これで、Config::get('app.item1')で'value1'が取れちゃいます!

「これじゃ、開発の時だけproviders配列に追加でインストールしたコンポーネントのサービスプロバイダーだけ追加できないじゃないか!」

…、ほれほれ。柔軟ですよ。柔軟。

例えばみんな大好き、IDEヘルパーのプロバイダーを追加したければ:

ADD_PROVIDERS=["Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider"]

と.envで指定しておいて、app.phpでは:

    'providers' => array_merge([
    ...
    ],json_decode(getenv('ADD_PROVIDERS'), true)),

マージしましょう。+演算子ではインデックの数値が重複しているため追加されません。array_mergeでマージします。

良くも悪くもPHPです。柔軟です。大抵のことはできます。