バリデーションとold関数
現在バリデーションの仕組みを実装しているが、エラーメッセージをビューとして表示させるにあたり、詰んだ箇所があった。
それはグローバルヘルパ関数old関数
の表示だ。
公式ドキュメントより(一部抜粋)
Laravelではoldグローバルヘルパ関数も用意しています。特にBladeテンプレートで直前の入力値を表示したい場合に、oldヘルパは便利です。指定した文字列の入力が存在していないときは、nullを返します。
タグの違いで記載箇所が異なることに気が付かず、作業に少し時間がかかったので、ここにその過程を残しておく。
inputタグの場合
まず$errorsインスタンス
のhasメソッド
を使用し、引数である'title'
のエラーの有無を確認する。
そしてエラーがあった場合、同じくgetメソッド
を使用し、引数である'title'
のエラーメッセージを取得している。それを1件ずつ表示する仕組みだ。
そして、バリデーションで内容が弾かれた場合でもoldメソッド
で(直前の)既に入力した内容を表示できるようにしている。
inputタグ
の場合、タグ内のvalue属性
として"{{ old('title') }}"
を指定する。
<div class="form-group">
@if ($errors->has('title'))
@foreach($errors->get('title') as $title_error)
<ul>
<li>
{{ $title_error }}
</li>
</ul>
@endforeach
@endif
<input type="text" class="form-control" name='title' value = "{{ old('title') }}" placeholder="タイトル">
</div>
textareaタグの場合
textareaタグ
の場合、タグ内に{{ old('content') }}
を指定してはダメだった。そもそもvalue属性自体がタグ内に記述できないのだろうか?
閉じタグとの間に直接記述しなければ、バリデーションで弾かれた場合は既に入力した内容が消えてしまう。さらにエラー画面も表示されないため、どこで間違えているのか理解するのに時間がかかった。
<div class="form-group">
@if ($errors->has('content'))
@foreach($errors->get('content') as $content_error)
<ul>
<li>
{{ $content_error }}
</li>
</ul>
@endforeach
@endif
<textarea class="form-control" name='content' placeholder="内容" rows="3">{{ old('content') }}</textarea>
</div>
反省
HTMLのタグの扱いやBladeの記述について、正直勉強不足感が否めない。その都度覚えていこう。