LoginSignup
76
64

More than 5 years have passed since last update.

【Laravel】Bladeにおけるold関数の使い方

Last updated at Posted at 2018-05-19

バリデーションと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の記述について、正直勉強不足感が否めない。その都度覚えていこう。

76
64
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
64