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ファイルを取得できるようになりました。
【参考サイト】
コメントが承認されるまで時間がかかります。