ログインユーザー名で書き込み
では、続いて、書き込みの際の「名前」項目をログイン名から自動取得するようにしてみましょう。
まず、index.blade.php にある投稿フォームから名前の欄をコメントアウトします。
index.blade.php
(省略)
<form method="post" action="{{ url("/messages") }}" enctype="multipart/form-data">
{{-- LaravelではCSRF対策のため以下の一行が必須です。 --}}
{{ csrf_field() }}
{{-- <div>
<label>
名前:
<input type="text" name="name" class="name_field" placeholder="お名前を入力">
</label>
</div> --}}
<div>
<label>
コメント:
<input type="text" name="body" class="comment_field" placeholder="コメントを入力">
</label>
</div>
<div>
<label>
画像:
<input type="file" name="image">
</label>
</div>
<div>
<input type="submit" value="投稿">
</div>
</form>
続いて、MessagesController.phpで、名前欄のバリデーションを解除して、代わりにログインユーザーのユーザー名を利用します。
MessagesController.php
(省略)
public function create(Request $request){
// requestオブジェクトのvalidateメソッドを利用。
$request->validate([
// nameのバリデーションを外す
//'name' => 'required|max:20',
'body' => 'required|max:100', // bodyは必須、100文字以内
'image' => [
'file',
'image',
'mimes:jpeg,png',
'dimensions:min_width=100,min_height=100,max_width=600,max_height=600',
], // imageは必須、ファイルアップロードが行われ、画像ファイルでjpeg,pngのいずれか、100x100~600x600まで
]);
$filename = '';
$image = $request->file('image');
if( isset($image) === true ){
// 拡張子を取得
$ext = $image->guessExtension();
// アップロードファイル名は [ランダム文字列20文字].[拡張子]
$filename = str_random(20) . ".{$ext}";
// publicディスク(storage/app/public/)のphotosディレクトリに保存
$path = $image->storeAs('photos', $filename, 'public');
}
// Messageモデルを利用して空のMessageオブジェクトを作成
$message = new \App\Message;
// nameはログインユーザー名を利用
//$message->name = $request->name;
$message->name = \Auth::user()->name;
$message->body = $request->body;
// ファイル名を保存
$message->image = $filename;
// messagesテーブルにINSERT
$message->save();
// メッセージ一覧ページにリダイレクト
return redirect('/messages');
}
上記のように変更することで
- 名前が入力されていなくてもバリデーションエラーにならない
- \Auth::user() メソッドで取得したログインユーザー情報の、nameプロパティの値を名前の値に利用
という変化が起こります。
掲示板に書き込みを行い、ログインユーザー名が自動的に名前の値として設定されることを確認しておきましょう。