【Laravel5.8】Storageクラスを用いてファイルを参照・編集したい

アプリケーションによっては、ファイルを利用してデータを管理することもあります。アプリケーション内に、あるファイルを読み込んだり、ファイルにデータを保存するなどして、ファイルを利用したデータ管理を行うことはよくあるでしょう。こうした場合、Laravelには便利なクラスが用意されています。
引用;PHPフレームワーク Laravel実践開発-掌田 津耶乃


ファイル参照やアップロードを行うサイトは数多くありますので、Storageクラスを用いて簡単にファイルの参照・編集を行なっていきましょう。

ファイルの参照を行う場合

/storage/app/内にtxtファイルを設置

Storageクラスはデフォルトで/storage/app/ディレクトリ内を参照するため、こちらに適当なtxtファイルを作成しましょう。

/storage/app/sample.txt

 sample.txtの中身です。
ControllerでStorageクラスを使用
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

use Illuminate\Support\Facades\Storage;

class HelloController extends Controller
{
    public function index()
    {
        // Storageクラスは自動で/storage/app/内を参照するため、それ以下のファイルパスを記述。 
        $sample_data = Storage::get('sample.txt');
        $data = [
            'msg'=> $sample_data
            ];
        return view('hello.index', $data);
    }
}
web.phpでルート定義
Route::get('/hello','HelloController@index');
Bladeファイルの作成
<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>Laravel</title>
    </head>
    <body>
        <h1>Hello Index</h1>
        <p>{{$msg}}</p>
    </body>
</html>

これでsample.txt内のテキストが{{$msg}}内に表示されているはずです。

ファイルの編集を行う場合

次にファイルの編集を行っていきましょう。
今回は、GETパラメータを利用して、GETパラメータの中身をsample.txtに表示されるようにしていきます。

Controllerへ追記

以下のアクションを追記します。

    public function other($msg)
    {
        $data = Storage::append('sample.txt',$msg);
        return redirect('/hello');
    }

appendは、第一引数に指定したファイルパスのファイルの末尾へ、第二引数に指定されたものを追記するというものです。

Storage::append('sample.txt',$msg);

ちなみにこのように書くとファイルの先頭に$msgを追記できます。

Storage::prepend('sample.txt',$msg);
web.phpへ追記

以下のようにルート定義を追記します。

Route::get('/hello/{msg}','HelloController@other');

これで、URLの末尾に追加した文言がsample.txtに追加されたはずです。

PHPフレームワーク Laravel実践開発-掌田 津耶乃