バリデーションとは?
バリデーションは「入力情報を検証するための仕組み」です。
Laravelではコントローラの「validate」メソッドを利用します。
ValidateRequestsというトレイと(メンバーをまとめてクラス追加するためのもの)に
利用されているクラスです。
$this->validate($request,[***検証設定の配列*]);
[
'**項目名**' => '割り当てる検証ルール',
'**項目名**' => '割り当てる検証ルール',
];
バリデーションを利用する
@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
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'=>'正しく入力されました!']);
}
}
Route::get('hello','App\Http\Controllers\HelloController@index');
Route::post('hello','App\Http\Controllers\HelloController@post');
バリデーションの基本処理
'name' => 'required',
上記はnameという項目に、「required」というルールを設定することを指します。
'age' => 'numeric|between:0,150',
上記は[age]という項目に。「numeric」と「betweeen」の2つのルールを設定していることを指します。
バリデーションの実行が、「validate」メソッドで行っています。
$this->validate($request, $validate_rule);
エラーメッセージの利用
@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
@if (count($errors) > 0)
**メッセージの表示処理**
@endif
@foreach($errors->all() as $error)
<li>{{$error}}</li> **メッセージの表示**
@endforeach
<input type="text" name="name" value="{{old('name')}}">
インプットタグのvalue
に{{old('name')}}
を追加すると、
フォームに入力した値を表示することができる。
それぞれの項目でエラーメッセージを表示する
@if ($errors->has('name'))
<tr><th>ERROR</th><td>{{$errors->first('name')}}</td></tr>
@endif
ここで出てくる@if ($errors->has('name'))
はname項目で
エラーが発生しているかどうかを判定しているメソッド。
$errors->has(**項目名**)
指定した項目の最初のエラーメッセージを取得するように、
するためには、「first」というメソッドを使用します。
first(**項目名**)
最初のエラーメッセージだけではなく、
全て取得した場合は「get」メソッドを使用します。
$変数 = $errors->get(項目名);
<エラーメッセージ取得のためのメソッド>
メソッド | 用途 |
---|---|
all | 全てのエラーメッセージを配列で取得 |
first | 指定した硬毛の最初のエラーメッセージを文字列で取得 |
get | 指定した項目のエラーメッセージ全てを配列で取得 |
@error
ディレクティブを使う
エラーメッセージを表示するのに、
@if
ディレクティブを使って、$errors->has()
の値が「true」ならば、
$errors->first();
や$errors->get();
でエラーメッセージを取り出して表示するのは面倒。
ここで、
@error
ディレクティブを使うことで、簡単に実装できます。(Larabel 5.8〜)
@error(名前)
**$messageでメッセージを表示**
@enderror
<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:日付 |
指定した日付よりもあとであるを判定 |
*** | *** |
*時間があれば追記