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です。柔軟です。大抵のことはできます。