Laravelで前回の入力値を表示する方法を紹介します。
#サンプルblade
この状態だと、入力エラーになっても、前回の入力値は表示されません。
<div class="wrapper">
@if(count($errors) > 0)
<ul class="bg-danger">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<form action="{{ route('sample.store') }}" method="post">
@csrf
<div class="form-group">
<label>名称<span class="required">※必須</span></label>
<input type="text" name="name" class="form-control">
</div>
<button type="submit" class="btn btn-success">登録</button>
</form>
</div>
#oldメソッド
ここで活躍するのが、old
メソッドです!
<input type="text" name="name" class="form-control" value="{{ old('name') }}">
old
の引数に、対象のhtmlのname属性を指定すると、前回の入力値を表示してくれます。
でも編集のときとか、すでに保存されている値がある場合は、どうしたらいいんや?
実はold
メソッドは第二引数にデフォルトの値を受け取ることができます。
<input type="text" name="name" class="form-control" value="{{ old('name', 'デフォルトの値') }}">
では、実践向きに記述しますね。
新規登録画面と編集画面は同じbladeファイルを使い回すと思いますので、それに対応したいと思います。
まずは、bladeのinputのvalueを以下のようにします。
<input type="text" name="name" class="form-control" value="{{ old('name', isset($defaultName) ? $defaultName : '') }}">
Controllerのcreateメソッド
public function create()
{
return view('sample');
}
createメソッドのrouteにアクセスすると、入力欄は空欄です。
Controllerのeditメソッド
public function edit($id)
{
return view('sample')->with([
'defaultName' => 'デフォルトの名称',
]);
}
editメソッドのrouteにアクセスすると、入力欄には「デフォルトの名称」が表示されます。
ちょいと解説
value="{{ old('name', isset($defaultName) ? $defaultName : '') }}"
第一引数には、htmlのname属性を入れます。こちらは、入力エラーがあった場合に表示されます。
第二引数は、初期表示の場合に表示されます。
新規登録時は$defaultName
の変数が設定されていないので、三項演算子の後半に行って、空になります。
編集時は、$defaultName
の変数が設定されているので、参考演算子の前半に行って、その値が表示されます。
#まとめ
素phpユーザーから、Laravelを始めて、最初につまづいたのがここだった。。
そのうちチェックボックス・ラジオボタンのoldの値の表示の仕方もまとめたい。