閲覧いただきありがとうございます。
フォームが空のままPOSTした際にRequestに入る値について質問です。
調べてみると、フォームが空のまま送信すると '' の空欄が入るとの事ですが、これはRequestにもname=''のように記載されるのでしょうか。
下記のようなindexとコントローラ2種を使って検証しました。
index.blade.php
PHP
1<body> 2 <h1>BladeTEST</h1> 3 @isset ($msg) 4 <p>名前:{{$msg}}</p> 5 @else 6 <p>名前が未入力です</p> 7 @endisset 8 9 <form method="post" action="/hello"> 10 @csrf 11 <input type="text" name="msg"> 12 <input type="submit"> 13 </form> 14</body>
コントローラ1
PHP
1class TESTController extends Controller{ 2 public function index(){ 3 return view('hello.index', ['msg' => '']); 4 } 5 6 public function post(Request $request){ 7 return view('hello.index', ['msg' => $request->msg]); 8 } 9}
コントローラ2
PHP
1class TESTController extends Controller{ 2 public function index(){ 3 return view('hello.index', ['msg' => '']); 4 } 5 6 public function post(Request $request){ 7 return view('hello.index', ['msg' => $request->msg]); 8 } 9}
- 1のコントローラでアクセスした場合
配列に値を渡していないのでindex側では「名前が未入力です」と表示され、名前を入力して送信すると名前が表示されます。
- 2のコントローラでアクセスした場合
配列に '' 空欄を渡しているので、「名前:」と表示されます。しかし、そのまま空欄で送信すると「名前が未入力です」と表示されます。
ここで疑問に思ったのは、2のコントローラで
return view('hello.index', ['msg' => '']);
とアクセス時に確定で配列に空欄を渡しているのと、フォームの値が空欄のまま送信した時の差です。
フォームの値が空白 '' のまま送信されたのであれば、上記の2のコントローラのように配列に空欄を渡している事になり、「名前:」と表示されるのではないでしょうか?
調べても答えに行きつかなかったため、どうかご教授お願いいたします。
個人的な予想も記載致しますので、考え方が誤っていた場合はよろしければご指摘いただけますと幸いです。
Requestに入っているはずのmsg要素が、空欄のためそもそも記載されていない(msg=''のようになっていない)
しかし、その場合2のコントローラの
return view('hello.index', ['msg' => $request->msg]);
の$request->msgの値はどうなっているのでしょうか。NULLが入りmsg変数は宣言されなかった事になっている?