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' => 'メッセージ']);

ルール
ルール 機能 備考
required 必須
nullable 未設定許可
integer 数値
string 文字列
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のいずれか
not_in:0,1,A,B 0,1,A,Bでない
date_format:Y-m-d 日時フォーマット
date_format:Y-m-d H:i:s 日時フォーマット
bail エラー時に以後のバリデーションを実行しない 複数ルール設定時

Follow me!

前の記事

Laravel Migration/Seed

次の記事

Laravel PHPUnit