0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel 開発入門】フォームリクエストのバリデーション

Posted at

Laravelでバリデーションを実装する

Laravelのバリデーション機能は、フォーム入力の検証を簡単に行うことができる強力なツールです。本記事では、Laravelでのバリデーションの基本から、カスタムバリデーション、Bladeテンプレートでのエラーメッセージの表示方法までを解説します。

1. バリデーションの基本

1.1 バリデーションはどのように設定するのか?

Laravelのコントローラー内でバリデーションを行うにはRequestクラスのvalidate メソッドを使用します。

public function store(Request $request)
{
    $validated = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8',
    ]);
    
    // バリデーション通過後の処理
}

上記の例では、name は必須で最大255文字、email は必須かつ一意であること、password は最低8文字であることをチェックしています。

2. カスタムエラーメッセージ

2.1 デフォルトのエラーメッセージを変更したい場合は?

デフォルトのエラーメッセージをカスタマイズするには、第二引数でメッセージ配列を渡します。

$validated = $request->validate([
    'name' => 'required',
    'email' => 'required|email',
], [
    'name.required' => '名前は必須項目です。',
    'email.required' => 'メールアドレスは必須です。',
    'email.email' => '有効なメールアドレスを入力してください。',
]);

3. FormRequestを利用したバリデーション

3.1 バリデーションを別ファイルに分離したい場合は?

バリデーションロジックをコントローラーから分離するために、FormRequest を使用する方法があります。

3.1.1 FormRequestの作成

php artisan make:request StoreUserRequest

3.1.2 ルールの定義

作成された StoreUserRequest クラス内で、rules メソッドを定義します。

public function rules()
{
    return [
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8',
    ];
}

3.1.3 コントローラーでの適用

コントローラー内で RequestStoreUserRequest に置き換えます。

public function store(StoreUserRequest $request)
{
    // バリデーション済みデータが取得できる
    $validated = $request->validated();
    
    // データ保存の処理
}

4. Bladeテンプレートでのエラーメッセージの表示

4.1 バリデーションエラーをビューに表示するには?

バリデーションエラーがある場合、Bladeテンプレートでエラーメッセージを表示できます。

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

4.2 特定の入力項目のエラーメッセージを表示するには?

個別のフィールドごとのエラーメッセージを表示する場合は以下のようにします。

<input type="text" name="name" value="{{ old('name') }}">
@if ($errors->has('name'))
    <span class="text-danger">{{ $errors->first('name') }}</span>
@endif

まとめ

Laravelのバリデーションは簡単に実装できるだけでなく、カスタムルールやエラーメッセージの定義も柔軟に対応できます。特に FormRequest を活用することで、コントローラーのコードを整理し、可読性を向上させることが可能です。ぜひプロジェクトで活用してみてください!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?