Laravel - 14. アクション - リクエストの処理

引き続き Request クラスについて学習していきましょう。前節で学習したように Request クラスの input メソッドを通じてリクエストパラメータにアクセスできます。 Request クラスには他にも、すべてのリクエストパラメータを取得する all メソッドやリクエストヘッダにアクセスする header メソッドなど、様々なメソッドが用意されています。これらのメソッドの使い方についても確認しておきましょう。

ここでは app/Http/Controllers/HelloController.phpstore アクションを以下のように修正します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Message;

class HelloController extends Controller
{
    public function index()
    {
        $title = "Hello Model!";
        $messages = Message::orderBy("id")->get();
        return view("hello/index", compact("title", "messages"));
    }

    public function create()
    {
        return view("hello/create");
    }

    public function store(Request $request)
    {
        $text = $request->input("text");
        $all = $request->all();
        $ua = $request->header("User-Agent");
        $path = $request->path();

        Log::debug("All:", $all);
        Log::debug("UA:" . $ua);
        Log::debug("Path:" . $path);

        return "Request parameters: " . $text;
    }
}

store アクションでは Request クラスのメソッドを呼び出してリクエストにアクセスしています。

        $text = $request->input("text");
        $all = $request->all();
        $ua = $request->header("User-Agent");
        $path = $request->path();

Request クラスの input メソッドは前節で学習したとおり入力フォームなどのリクエストパラメータを処理します。 $request->all() メソッドはリクエストに含まれるすべてのパラメータを取得します。 $request->header("User-Agent") メソッドはリクエストヘッダにアクセスするメソッドです。ここでは引数に取得するヘッダ名として "User-Agent" を指定しています。最後に $request->path() メソッドでリクエストされたパスを取得しています。

次に Log ファサードを使って取得した内容をログファイルに出力しています。Laravelは Log ファサードによって簡単にログを残すことができるようになっています。デフォルトでは storage/logs/laravel.log にログが出力されます。

        Log::debug("All:", $all);
        Log::debug("UA:" . $ua);
        Log::debug("Path:" . $path);

ここでは3件のデバッグログを出力しています。後ほどログファイルの出力を確認することにします。

コントローラにおいて Log ファサードを使う場合は use Illuminate\Support\Facades\Log; が必要です。

動作確認

store アクションを修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。

$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000

続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。

http://localhost:8000/hello/create

入力フォームが表示されるのでメッセージを入力して送信ボタンをクリックします。

ブラウザ上の実行結果は前回と同様になります。次にログファイル( storage/logs/laravel.log )を確認してみましょう。

[2020-09-07 01:38:55] local.DEBUG: All: {"_token":"J1Ngy5CBSDPUnqqZsWbxJtZYwVOhmYEES8LWUG5L","text":"Hola"} 
[2020-09-07 01:38:55] local.DEBUG: UA:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36  
[2020-09-07 01:38:55] local.DEBUG: Path:hello/store  

ログファイルに3件のデバッグログが確認できるでしょう。このようにRequestインスタンスからリクエストパラメータ、リクエストヘッダ、パスといった情報にアクセスできていることがわかります。

Laravelのロギングは Monolog ライブラリによって実装されています。ログの出力先や出力レベルをカスタマイズできるようになっています。ロギングの詳細については https://laravel.com/docs/6.x/logging を参照してください。

まとめ

  • Request クラスにはリクエストを操作するメソッドが用意されている
  • リクエストヘッダを取得するには header メソッド、リクエストパラメータをすべて取得するには all メソッドを使う
  • リクエストのパスにアクセスする path メソッドなど様々なメソッドが用意されている