2
3

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 3 years have passed since last update.

【Laravel】バリデーション 復習

Last updated at Posted at 2020-07-16

この記事は以下の書籍を参考にして執筆しました。

バリデーション

  • コントローラでバリデーション(簡単)
  • フォームリクエストを使う
  • バリデータを使う

コントローラでバリデーション

コントローラの基底クラスValidateRequestというトレイトの機能。
基本的にコントローラにあるメソッドと思ってもらって一向に構わない。

$this->validate($request,[検証設定の配列]);
検証設定の配列
[
  'フォームの項目名'=>'検証ルール',
  'フォームの項目名'=>'検証ルール',
  ...
]

出典:PHPフレームワークLaravel入門 第2版

フォームリクエストを使う

コントローラではないところでバリデーションをする。

フォームリクエスト

リクエストをフォーム利用のために拡張したもの。
Requestクラスを拡張してFromRequestが作成される。

FromRequestのメソッド

フォームリクエストをartisaで、例えばHelloRequestという名前で作成するとHelloRequestクラスはFromRequestを継承している。
FromRequestはリクエスト機能をベースに、バリデーションなどのフォーム処理機能が追加されている。

FromRequestには以下のメソッドがある

authorize

フォー0無リクエストを利用するアクションでフォームリクエストの利用が許可されているかどうかを示す。戻り値は真偽値。

真偽値 説明
true 許可
false 不許可。例外が発生してフォーム処理できなくなる

rules

検証値ルールを設定。

メッセージのカスタマイズ

FromRequestのmessageをオーバーライドする。

public function message(){
  return [
    '項目名.検証ルール'=>'エラーメッセージ',
    '項目名.検証ルール'=>'エラーメッセージ',
    ...
  ];
}

バリデータを使う

コントローラでValidatorクラスのインスタンスを作成して処理する。

コントローラ
//use Validator; を追加する
public function post(Request $request){
  $validator=Validator::make($request->all(),$rules);
  if($validator->fails()){
    return redirect('hello')->withError($validator)->withInput();
  }
  return view('hello.index',['msg'=>'正しい入力']);
}

出典:PHPフレームワークLaravel入門 第2版

バリデータの基本

Validatorインスタンスの作成はmakeを使って行う

$validator=Validator::make(値の配列,ルール配列);
引数 説明
第1引数 チェックする値をまとめた配列
第2引数 検証ルール

フォームをそのままチェックするなら$request->all()でOK

エラーチェック

  if($validator->fails()){...

fails

返り値 説明
true バリデーションエラー発生
false 問題なし

passes

同じ機能としてpassesというメソッドもある
これはfailsのときと

返り値 説明
true 問題ない
false バリデーションエラー発生

入力フォームのリダイレクト

このスクリプトはエラーが発生したらフォームページへ戻るようにしている。

redirect('hello')->withError($validator)->withInput();

出典:PHPフレームワークLaravel入門 第2版

メソッド 説明
redirect 指定のアドレスへ移動
withErrors Validatorで発生したエラーメッセージをリダイレクト先まで引き継ぐ
withInput 送信されたフォームをリダイレクト先まで引き継ぐ

クエリ文字列のバリデータを適応する

Validatorインスタンス作成の第1引数にクエリ文字列の配列値を渡す。
第2引数には項目を書く。

$validator=Validator::make($request->query(),[
  'id'=>'required',
  'pass'=>'required'
]);

$request->query()はこんな感じになる。

// アクセスしたアドレスが「/hello?id=taro&pass=yamada」なら
[
  'id'=>'taro',
  'pass'=>'yaamda'
]

エラーメッセージのカスタマイズ

Validatorインスタンス作成時、第3引数へ指定する。

$validator=Validator::make(値の配列,ルール配列,エラーメッセージ配列);

出典:PHPフレームワークLaravel入門 第2版

メッセージは'項目名.検証ルール'=>'エラーメッセージ'を配列にしたもの。
まぁいつもの。

条件に応じてルールを追加

$validator->sometimes(項目名ルール名クロージャ)

出典:PHPフレームワークLaravel入門 第2版

sometimesを処理した結果によってルールを追加する。

クロージャがルールを追加すべきかを決定する。

クロージャはこんな感じ
function ($input){
  //処理
  return ;
}

出典:PHPフレームワークLaravel入門 第2版

項目 説明
$input 入力された値をまとめたもの
ルールを追加すべきかを決める。trueなら何もしない。falseならルール追加。

出典:PHPフレームワークLaravel入門 第2版

$input->nameという具合で取り出せる。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?