Laravel 資料驗證
一、基本驗證範例
使用陣列格式定義規則(推薦)
多欄位驗證
驗證結果判斷
二、控制器內使用
$request->validate()
修改驗證請求類別
在 Controller 中使用
四、實例範例
路由設定
表單驗證請求類別
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ApplicationCheckRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => ['required', 'string', 'regex:/^[\p{Han}a-zA-Z\s]+$/u'],
'birthday' => ['required', 'date_format:Y-m-d'],
'identity_card' => ['required', 'string', 'regex:/^[A-Z]\d{9}$/'],
'ethnic_group' => ['required', 'string', 'regex:/^[\p{Han}]{2,6}$/u'],
'notes' => ['nullable', 'string', 'regex:/^[\p{Han}a-zA-Z0-9]+$/u'],
'gender' => ['required', 'string', 'regex:/^[\p{Han}]{2}$/u'],
'phone_type' => ['required', 'string', 'regex:/^[\p{Han}]{2}$/u'],
'contact_number' => ['required', 'string', 'regex:/^09\d{8}$/'],
'countyfirst' => ['required', 'string', 'regex:/^[\p{Han}]{3}$/u'],
'districtfirst' => ['required', 'string', 'regex:/^[\p{Han}]{3,4}$/u'],
'residence' => ['required', 'string', 'regex:/^[\p{Han}0-9a-zA-Z\s\-]+$/u'],
'countysecond' => ['required', 'string', 'regex:/^[\p{Han}]{3}$/u'],
'districtsecond' => ['required', 'string', 'regex:/^[\p{Han}]{3,4}$/u'],
'placeOfResidence' => ['required', 'string', 'regex:/^[\p{Han}0-9a-zA-Z\s\-]+$/u'],
'application_language' => ['required', 'string', 'regex:/^ethnic\-\d+$/'],
'account' => ['required', 'string'],
];
}
}
控制器方法
五、Ajax 請求回傳 JSON 錯誤訊息
建立 Json 驗證基底類別
編輯 ApiJsonRequest
使用方式:建立繼承類別
如需官方文件參考,請見:
Laravel 資料驗證
一、基本驗證範例
use Illuminate\Support\Facades\Validator; $validator = Validator::make( ['name' => 'Dayle'], ['name' => 'required|min:5'] );使用陣列格式定義規則(推薦)
$validator = Validator::make( ['name' => 'Dayle'], ['name' => ['required', 'min:5']] );多欄位驗證
$validator = Validator::make( [ 'name' => 'Dayle', 'password' => 'lamepassword', 'email' => '[email protected]', ], [ 'name' => 'required', 'password' => 'required|min:8', 'email' => 'required|email|unique:users', ] );驗證結果判斷
if ($validator->fails()) { // 驗證失敗 } // 取得失敗欄位與規則 $failed = $validator->failed(); // 取得錯誤訊息集合 $messages = $validator->messages();二、控制器內使用
$request->validate()public function store(Request $request) { $validated = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // 資料通過驗證,可進一步處理 }三、自訂 FormRequest 類別
修改驗證請求類別
namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class TestRequest extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'a' => 'required', 'b' => 'email', ]; } }在 Controller 中使用
use App\Http\Requests\TestRequest; public function check(TestRequest $request) { // 資料自動驗證,通過後才會進入此處 }四、實例範例
路由設定
Route::post('application/check', [ApplicationController::class, 'check']) ->name('application.check');表單驗證請求類別
namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ApplicationCheckRequest extends FormRequest { public function authorize() { return true; } public function rules() { return [ 'name' => ['required', 'string', 'regex:/^[\p{Han}a-zA-Z\s]+$/u'], 'birthday' => ['required', 'date_format:Y-m-d'], 'identity_card' => ['required', 'string', 'regex:/^[A-Z]\d{9}$/'], 'ethnic_group' => ['required', 'string', 'regex:/^[\p{Han}]{2,6}$/u'], 'notes' => ['nullable', 'string', 'regex:/^[\p{Han}a-zA-Z0-9]+$/u'], 'gender' => ['required', 'string', 'regex:/^[\p{Han}]{2}$/u'], 'phone_type' => ['required', 'string', 'regex:/^[\p{Han}]{2}$/u'], 'contact_number' => ['required', 'string', 'regex:/^09\d{8}$/'], 'countyfirst' => ['required', 'string', 'regex:/^[\p{Han}]{3}$/u'], 'districtfirst' => ['required', 'string', 'regex:/^[\p{Han}]{3,4}$/u'], 'residence' => ['required', 'string', 'regex:/^[\p{Han}0-9a-zA-Z\s\-]+$/u'], 'countysecond' => ['required', 'string', 'regex:/^[\p{Han}]{3}$/u'], 'districtsecond' => ['required', 'string', 'regex:/^[\p{Han}]{3,4}$/u'], 'placeOfResidence' => ['required', 'string', 'regex:/^[\p{Han}0-9a-zA-Z\s\-]+$/u'], 'application_language' => ['required', 'string', 'regex:/^ethnic\-\d+$/'], 'account' => ['required', 'string'], ]; } }控制器方法
use App\Http\Requests\ApplicationCheckRequest; public function check(ApplicationCheckRequest $request) { $form = $request->validated(); $exists = ApplicationForm::where('identity_card', $form['identity_card']) ->where('application_language', $form['application_language']) ->where('application_level', $form['application_level']) ->exists(); $approved = ApplicationForm::where('identity_card', $form['identity_card']) ->where('application_language', $form['application_language']) ->where('application_level', $form['application_level']) ->where('application_status', 4) ->exists(); $check = !$exists || $approved ? 0 : 1; $request->session()->put('application', $form); return response()->json(['check' => $check]); }五、Ajax 請求回傳 JSON 錯誤訊息
建立 Json 驗證基底類別
編輯
ApiJsonRequestnamespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class ApiJsonRequest extends FormRequest { protected function failedValidation(Validator $validator) { throw new HttpResponseException( response()->json([ 'errors' => $validator->errors(), ], 422) ); } }使用方式:建立繼承類別
namespace App\Http\Requests; class MyAjaxRequest extends ApiJsonRequest { public function rules() { return [ 'name' => 'required|string', // ... ]; } }如需官方文件參考,請見: