Laravel - 14. アクション - リクエストの処理
引き続き Request
クラスについて学習していきましょう。前節で学習したように Request
クラスの input
メソッドを通じてリクエストパラメータにアクセスできます。 Request
クラスには他にも、すべてのリクエストパラメータを取得する all
メソッドやリクエストヘッダにアクセスする header
メソッドなど、様々なメソッドが用意されています。これらのメソッドの使い方についても確認しておきましょう。
ここでは app/Http/Controllers/HelloController.php
の store
アクションを以下のように修正します。
<?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
メソッドなど様々なメソッドが用意されている