Laravelでローカルにあるjsonファイルを扱おうとしたときに少し詰まったので、対応方法をメモしておきます。
うまくいかなかったコード
public\data\test.json
{
"test": "json test"
}
app\Http\routes.php
Route::get('/json_test', function() {
$url = '/data/test.json';
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
return var_dump($json);
});
$url = ‘http://localhost:8000/data/test.json’; のように絶対パスでも試してみたのですが、jsonファイルをうまく取得できませんでした。
解決方法
最終的に「C:\…」のようにjsonファイル自体の絶対パスだと取得できました。
ただサーバにアップしたときなど環境によってパスは変わってしまうので、Laravelで用意されているヘルパー関数のpublic_path()でpublicディレクトリまでのパスを取得するようにしました。
app\Http\routes.php
Route::get('/json_test', function() {
$url = public_path() . '/data/test.json';
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
return var_dump($json);
});
これでローカルのjsonファイルを取得できるようになりました。
【参考サイト】
コメントが承認されるまで時間がかかります。