概要
Laravelでjson形式の設定ファイルを設置する最適な場所を探した結果こうなった、という紹介です。
要件
- 関数などを使って簡単に設定にアクセスできる
- 設定ファイルなので、ファイル自体の削除・書き込みがされない
結果的に、configにはjsonファイルを読み出す処理を書いて、別の場所にjsonファイルを設置しています。
これがベストな方法かはわかりませんが、以下の難点を避けて、要件を満たすことはできています。もっといい方法知ってるという方は、ご教示お願いします。
注:こうはしなかったという選択肢
configをjsonで書いておきたいっていうのはよくあると思うのですが、Laravelではヘルパー関数のconfig()
で読み出せるのはPHP配列なので、単純にconfig
以下にjsonファイルをおいてもうまく動作しません。
また、storage
に設置して読み出すという方法もあり、ライブラリ( https://github.com/labkod/laravel-config )が作られたりしてしますが、storage
以下のファイルはアプリケーション上から、編集・削除できるので設定ファイルを置きたくないです。(Storage::delete()
とか)
解決法概要
-
config/json/
以下にjsonファイルを設置 -
config/myconfig.json.php
を作成 - 設定ファイルをリポジトリ管理したくない場合
-
.gitignore
に追記 -
config/json/myconfig.json.example
を作成
-
解決法詳細
jsonファイル設置
$ mkdir config/json
$ mv /path/to/json/file config/json/myconfig.json
config/myconfig.json.php
を作成
condigファイルでjsonファイルを読みだし、デコードする処理を書きます。
<?php
return json_decode(file_get_contents(__DIR__ . '/json/myconfig.json'), true);
以上の設定で、Laravelのヘルパー関数config
を使って、設定の読み出しができます。ドット記法も使えちゃいます。
$config = config('myconfig.json');
設定ファイルをリポジトリ管理したくない場合
configには秘匿したい情報もあったりすると思うので、その場合は以下の手順でgit管理から外しておくといいと思います。
.gitignore
に追記
config/json/*.json
config/json/myconfig.json.example
を作成
$ cp config/json/myconfig.json config/json/myconfig.json.example
秘匿したい情報を削除。
exampleファイルのみをgit管理すればOKでしょう。
課題
とりあえず、一つの設定ファイルにはこれで対応できます。
この後運用した結果、設定ファイルを置き忘れるなどの管理面での問題が出てくるかもしれませんが、その際はまた考えます。