今天這篇是把第 9 天:表單處理與請求的自定義提出更細部的說明,尤其是在定義自訂驗證邏輯這部分。
文件:表单验证
內建驗證規則: 使用 Laravel 的內建規則進行常見資料驗證。
自訂驗證規則: 建立自訂規則以滿足特定需求。
表單請求: 使用表單請求類別封裝驗證邏輯,提升程式碼的整潔性和可維護性。
Laravel 提供了許多內建的驗證規則,可以在表單提交時進行資料驗證,當然也可以在控制器方法中使用這些規則來確保資料的有效性。
範例 - 控制器中的驗證
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed|min:8',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// 驗證通過,繼續處理數據
}
有時內建的驗證規則可能不滿足需求,這時可以建立自訂驗證規則。
step 1 - 建立自訂規則
用指令 php artisan make:rule CustomRule
建立自訂規則類
step 2 - 定義自訂驗證邏輯
在 app/Rules
目錄下產生一個新的規則類別檔案 app/Rules/CustomRule.php
。
編輯該文件以定義自訂驗證邏輯:
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class CustomRule implements Rule
{
public function passes($attribute, $value)
{
// 自訂驗證邏輯
return $value === 'special';
}
public function message()
{
// 自訂錯誤訊息
return 'The :attribute must be "special".';
}
}
step 3 - 在控制器中使用自訂規則
use App\Rules\CustomRule;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'attribute' => ['required', new CustomRule()],
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// 驗證通過,繼續處理數據
}
表單請求(Form Request)是 Laravel 提供的一種更整潔的驗證處理方法,可以將驗證邏輯封裝在單獨的請求類別中。
step 1 - 建立表單請求
用指令 php artisan make:request StoreUserRequest
建立表單請求
step 2 - 定義自訂驗證規則和授權邏輯
在 app/Http/Requests
目錄下產生一個新的請求類別檔案 app/Http/Requests/StoreUserRequest.php
。
編輯該文件以定義驗證規則和授權邏輯:
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function authorize()
{
// 是否授權該請求
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed|min:8',
];
}
public function messages()
{
return [
'name.required' => 'The name field is required.',
'email.email' => 'Please provide a valid email address.',
'password.confirmed' => 'Passwords do not match.',
];
}
}
step 3 - 在控制器中使用表單請求
將表單請求類別作為控制器方法的參數:
use App\Http\Requests\StoreUserRequest;
public function store(StoreUserRequest $request)
{
// 驗證通過,繼續處理數據
}