0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Chapter4 バリデーション(4-2)

Last updated at Posted at 2022-07-02

バリデーションとは?

バリデーションは「入力情報を検証するための仕組み」です。
Laravelではコントローラの「validate」メソッドを利用します。

ValidateRequestsというトレイと(メンバーをまとめてクラス追加するためのもの)に
利用されているクラスです。

sample.php
$this->validate($request,[***検証設定の配列*]);
sample.php
[
     '**項目名**' => '割り当てる検証ルール',
     '**項目名**' => '割り当てる検証ルール',

     ];

バリデーションを利用する

index.php
@section('content')

    <p>{{$msg}}</p>
    <form action="/hello" method="post">
        <table>
            @csrf
            <tr><th>name: </th><td><input type="text" name="name"></td></tr>
            <tr><th>mail: </th><td><input type="text" name="mail"></td></tr>
            <tr><th>age: </th><td><input type="text" name="age"></td></tr>
            <tr><th></th><td><input type="submit" value="send"></td></tr>
        </table>
    </form>

@endsection
HelloController.php
class HelloController extends Controller
{
    public function index(Request $request) {

        return view('hello.index',['msg'=>'フォームを入力']);

    }

    public function post(Request $request) {

        $validate_rule = [

            'name' => 'required',
            'mail' => 'email',
            'age' => 'numeric|between:0,150',

        ];

        $this->validate($request, $validate_rule);

        return view('hello.index',['msg'=>'正しく入力されました!']);

    }

}
web.php
Route::get('hello','App\Http\Controllers\HelloController@index');
Route::post('hello','App\Http\Controllers\HelloController@post');

バリデーションの基本処理

sample.php
'name' => 'required',

上記はnameという項目に、「required」というルールを設定することを指します。

sample.php
'age' => 'numeric|between:0,150',

上記は[age]という項目に。「numeric」と「betweeen」の2つのルールを設定していることを指します。

バリデーションの実行が、「validate」メソッドで行っています。

sample.php
$this->validate($request, $validate_rule);

エラーメッセージの利用

index.php
@section('content')

    <p>{{$msg}}</p>
    <form action="/hello" method="post">
        <p>{{$msg}}</p>
        @if (count($errors) > 0)
            <div>
                <ul>
                    @foreach($errors->all() as $error)
                        <li>{{$error}}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        <table>
            @csrf
            <tr><th>name: </th><td><input type="text" name="name"></td></tr>
            <tr><th>mail: </th><td><input type="text" name="mail"></td></tr>
            <tr><th>age: </th><td><input type="text" name="age"></td></tr>
            <tr><th></th><td><input type="submit" value="send"></td></tr>
        </table>
    </form>

@endsection
sample.php
@if (count($errors) > 0)
         **メッセージの表示処理**
@endif
sample.php
@foreach($errors->all() as $error)
       <li>{{$error}}</li>    **メッセージの表示**
@endforeach
sample.php
<input type="text" name="name" value="{{old('name')}}">

インプットタグのvalue{{old('name')}}を追加すると、
フォームに入力した値を表示することができる。

それぞれの項目でエラーメッセージを表示する

sample.php
@if ($errors->has('name'))
     <tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
@endif

ここで出てくる@if ($errors->has('name'))はname項目で
エラーが発生しているかどうかを判定しているメソッド。

sample.php
$errors->has(**項目名**)

指定した項目の最初のエラーメッセージを取得するように、
するためには、「first」というメソッドを使用します。

sample.php
first(**項目名**)

最初のエラーメッセージだけではなく、
全て取得した場合は「get」メソッドを使用します。

sample.php
$変数 = $errors->get(項目名);

<エラーメッセージ取得のためのメソッド>

メソッド 用途
all 全てのエラーメッセージを配列で取得
first 指定した硬毛の最初のエラーメッセージを文字列で取得
get 指定した項目のエラーメッセージ全てを配列で取得

@errorディレクティブを使う

エラーメッセージを表示するのに、
@ifディレクティブを使って、$errors->has()の値が「true」ならば、
$errors->first();$errors->get();でエラーメッセージを取り出して表示するのは面倒。

ここで、
@errorディレクティブを使うことで、簡単に実装できます。(Larabel 5.8〜)

sample.php
@error(名前)
**$messageでメッセージを表示**
@enderror
index.php
<table>
            @csrf
            @error('name')
                <tr><th>ERROR</th>
                <td>{{$message}}</td></tr>
            @enderror
            <tr><th>name: </th><td><input type="text" name="name" value="{{old('name')}}"></td></tr>
            @error('mail')
            <tr><th>ERROR</th>
                <td>{{$message}}</td></tr>
            @enderror
            <tr><th>mail: </th><td><input type="text" name="mail" value="{{old('mail')}}"></td></tr>
            @error('age')
            <tr><th>ERROR</th>
                <td>{{$message}}</td></tr>
            @enderror
            <tr><th>age: </th><td><input type="text" name="age" value="{{old('age')}}"></td></tr>
            <tr><th></th><td><input type="submit" value="send"></td></tr>
        </table>

バリデーションの検証ルール

必須項目のバリデーションルール

検証ルール名 検証ルール
required 必須項目である
*** ***  

*時間があれば追記

検証ルール

検証ルール名 検証ルール
accept 「true・on・yes・1」といった値がどうかの判定
(チェックボックスの判定に使用)
active_url
url
ドメインが実際に有効なものどうかを判定
after:日付
after_or_equal:日付
指定した日付よりもあとであるを判定
*** ***

*時間があれば追記

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?