【Laravel】Bladeでのold関数:バリデーションエラー時の入力値を残す方法

2023.11.04 /

【Laravel】Bladeでのold関数:バリデーションエラー時の入力値を残す方法

記事ではLaravelにおける、Bladeのフォームで利用するoldヘルパー関数について詳しく解説していきます。

LaravelによるWebアプリケーションでは、フォームの入力値がバリデーションエラーに引っかかるとフォームはすべてクリアされてしまいます。

バリデーションエラーが発生してもフォームに入力された値をそのまま残しておくためにoldヘルパー関数を利用します。

ぜひ本記事を通して、oldヘルパー関数を利用したフォームの入力値を残す方法について理解を深めてください。

ここで利用しているLaravelのバージョンはLaravel10です。

バリデーションとは

Webアプリケーションではなにかしらのデータ登録で次図のような登録フォームを使用します。

Laravel:登録フォーム

このようなフォームを利用する場合、データの品質や整合性を確保するためにユーザーがフォーム入力したデータ(リクエスト)が適切か、必須項目が入力されているか等をチェックする必要があります。

例えばメールアドレスの形式が正しいか、年齢が数値であるか、パスワードが最小文字数を超えているか等を確認します。
このようなユーザーから送られたリクエストをチェックすることをバリデーションと呼びます。

Laravelではバリデーションにより入力値にエラーがあると判別した場合、再度フォーム入力のページに戻ります。

Laravelでバリデーション機能を設定する方法については以下記事をご参照ください。

oldヘルパー関数

oldヘルパー関数とは

フォームに入力した値を送信した後にバリデーションエラーになると、入力していた内容はすべてクリアされてしまいます。これではユーザーが再度フォーム入力を一から行う必要があるため、ユーザービリティは良くないです。

Laravelにはoldヘルパー関数が備わっており、これを利用することでセッションに保存されているフォーム入力内容を取得することができます。

POINT

ユーザーがフォームを送信するとLaravelではフォーム入力データを一時的にセッションに保存します

つまりoldヘルパー関数とはフォームとそのバリデーションを扱う際に利用する関数であり、フォームがバリデーションエラーを発生したときにユーザーが入力したデータをフォームに再表示するのに役立つということです。

oldヘルパー関数の使用方法

oldヘルパー関数は以下構文に沿って使用します。

構文

old('input name')

引数には取り出したい入力フィールドのname属性の値を指定します。例えば入力フィールドがname='mail'であった場合、old('mail')とすることでエラー発生前に送信したフォームの値を取り出すことができます。

例えば次のようにBlade内で利用します。

<input type="text" name="title" id="title" value="{{ old('title') }}">
POINT

old関数はフォーム送信前はnullを返します

デフォルト値を設定する方法

oldヘルパー関数でデフォルト値を設定する場合は以下構文に沿って使用します。

構文

old('input name', 'default value')

上記構文の通り、第二引数にデフォルト値を指定します。第一引数で指定した入力データが存在しない場合に第二引数で指定したデフォルト値が返されます。

例えばセレクトボックスでは次のように使用することができます。

<select name="gender">
    <option value="man" {{ old('gender', 'man') == 'man' ? 'selected' : '' }}>Man </option>
    <option value="woman" {{ old('gender', 'man') == 'woman' ? 'selected' : '' }}>Woman</option>
</select>

上記ではデフォルトではmanが選択された状態で表示されます。

チェックボックスでは次のような使い方もできます。

<input type="checkbox" name="subscribe" value="1" {{ old('subscribe', '1') == '1' ? 'checked' : '' }}>

old関数でデフォルト値を設定することで、例えば編集画面で最初はデータベースに登録されている値をフォームに入れておき、バリデーションエラーが発生したら入力されていた値を表示するといった利用が可能です。