Laravel Validation

フォームリクエスト

生成コマンド

php artisan make:request TestRequest

Validation

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class TestRequest extends FormRequest
{
 public function authorize()
 {
  return true;
 }

 public function rules()
 {
  return [
   'column1' => 'required | array',
   'column2' => 'required | integer',
  ];
 }

 public function messages()
 {
  return [];
 }

 public function attributes()
 {
  return [
   'column1' => '〜',
   'column2' => '〜',
  ];
 }
}

使用

namespace App\Http\Controllers;

use App\Http\Requests\TestRequest;

class TestController extends Controller
{
 public function test(TestRequest $request)
 {
  〜
 }
}

バリデータ

Validation

namespace App\Rules;

use Illuminate\Support\Facades\Validator;

trait TestValidation
{
 protected function checkTest(Request $request)
 {
  $validator = Validator::make($request->all(),
   [
    'column' => ['max:255'],
   ],
   [
    'column.max' => 'E999',
   ]
  );
  
  失敗時
  if ($validator->fails()) {
   エラーコード取得
   $codes = $validator->errors()->all(); 
   
   return $codes;
  }

  成功時
  return true;
 }
}

呼び出し

class TestController extends Controller
{
 use \App\Rules\TestValidation;

 public function test(Request $request)
 {
  $result = $this->checkTest($request);
 }
}

返却

$validator->errors()->add('field', 'メッセージ');
throw new ValidationException($validator);
または
throw ValidationException::withMessages(['field' => 'メッセージ']);

ルール

一覧

パラメータparamの値が1の時に必須

ルール 機能 備考
required 必須
requiredif:param,1 条件必須
nullable 未設定許可
integer 数値
string 文字列
array 配列
email Eメール
digits:3 3桁の数値
digits_between:1,5 1〜5桁の数値
regex:/^\+[0-9]{12}$/ 正規表現
exists:users,id usersテーブルにIDが存在する
unique:users,phone usersテーブルでphoneが重複しない
min:6 最小桁
max:255 最大桁
size:10 指定の値(10)と一致するか
in:0,1,A,B 0,1,A,Bのいずれか Rule::in([0,1,A,B])
not_in:0,1,A,B 0,1,A,Bでない
date_format:Y-m-d 日時フォーマット
date_format:Y-m-d H:i:s 日時フォーマット
bail エラー時に以後のバリデーションを実行しない 複数ルール設定時
複数

public function rules()
{
 return [
  'column1' => 'required | array',
  'column2' => [
   'required',
   'integer',
  ],
 ];
}

WHERE句を用いた問い合わせを用いたルール

use Illuminate\Validation\Rule;

public function rules()
{
 return [
  'column3' => [
   ‘exists:users,id’にwhere句を追加
   Rule::exists('users', 'id')->where(function ($query) {
    $query->where('col1', 1)
     ->whereNull('col2');
   }),
  ],
 ];
}

配列

public function rules()
{
 return [
  'columns' => 'nullable | array',
  要素のバリデーション
  'columns.*' => [
   'string',
   'in:A,B,C',
  ],
 ];
}

 
 

前の記事

Laravel Migration/Seed

次の記事

Laravel PHPUnit