【Laravel】2パターンのバリデーションの作成

ヤマモト

2024.09.11

16

こんにちは、山本です。


今回は前回の利用者登録フォームにバリデーション作成の実装を行いました。

前回のフォームの変更でパスワード確認のフォームを追加しました。


・create.blade.php

    <label for="passwword-confirm">パスワード確認</label>
    <input type="password" name="password_confirmation">


エラー内容

・名前

入力必須

32文字以内


・メールアドレス

入力必須

メールアドレス形式


・パスワード

入力必須

4文字以上

確認用と一致するか


コントローラーを編集してバリデーションを作成

UsersController.phpを編集

confirmメソッドにバリデーションを設定


    public function confirm(Request $request)
    {
        $request->validate([
            'name' => ['required', 'max:32'],
            'email' =>['required', 'email'],
            'password' =>['required', 'min:4', 'confirmed'],
        ],
        [
            'name.required' => '名前を入力してください',
            'name.max' => '最大32文字で入力してください',
            'email.required' => 'メールアドレスを入力してください',
            'email.email' => 'メールアドレス形式で入力してください',
            'password.required' => 'パスワードを入力してください',
            'password.min' => '4文字以上で入力してください',
            'password.confirmed' => 'パスワードが一致していません',
        ]);


        return view('users/confirm', [
            'inputs' => $request->all(),
        ]);
    }

フォームリクエストからバリデーションを作成

FormRequestとはRequestファサードを継承したもので、バリデーションのルールやメッセージをカスタマイズするのに特化している。


・下記コマンドでファイル作成

php artisan make:request UserRequest



UserRequest.phpを編集

・authorizeメソッド

trueを返すことでUserRequestの使用を許可する

   

  public function authorize()
  {
    return true;
  }



・rulesメソッド

バリデーションを定義する


  public function rules(): array
  {
    return [
      'name' => ['required', 'max:32'],
      'email' =>['required', 'email'],
      'password' =>['required', 'min:4', 'confirmed'],
    ];
  }



・messageメソッド

バリデーションエラーの場合のメッセージをカスタマイズする

  

public function messages()
  {
    return [
      'name.required' => '名前を入力してください',
      'name.max' => '最大32文字で入力してください',
      'email.required' => 'メールアドレスを入力してください',
      'email.email' => 'メールアドレス形式で入力してください',
      'password.required' => 'パスワードを入力してください',
      'password.min' => '4文字以上で入力してください',
      'password.confirmed' => 'パスワードが一致していません',
    ];
  }


UsersControllerを編集

バリデーションを適用する場合UserRequestクラスで受け取るように編集して紐づける


  public function confirm(UserRequest $request)
  {
    return view('users/confirm', [
      'inputs' => $request->all(),
    ]);
  }


テンプレート編集してエラーメッセージを表示

create.blade.phpを編集

各フォームの下にエラーメッセージが表示されるように調整。


…
  @error('name')
    <p style="color:red">{{ $message }}</p>
  @enderror
…
  @error('email')
    <p style="color:red">{{ $message }}</p>
  @enderror
…
  @error('password')
    <p style="color:red">{{ $message }}</p>
  @enderror
…


動作確認

設定どおりのエラーになり、各フォームの下にメッセージが表示されることを確認





まとめ

今回は利用者登録フォームにバリデーションを作成し、各フォームの下にメッセージが表示されるように実装を行いました。

この記事をシェアする