Laravel 編碼技巧 表單驗(yàn)證

2023-02-16 17:10 更新

圖片驗(yàn)證

在驗(yàn)證上傳的圖片時(shí),可以指定所需的尺寸。

['photo' => 'dimensions:max_width=4096,max_height=4096']

自定義驗(yàn)證錯(cuò)誤的信息

只需在 resources/lang/xx/validation.php 文件創(chuàng)建適當(dāng)?shù)臄?shù)組結(jié)構(gòu),就可以定義定每個(gè) 字段、規(guī)則語言的驗(yàn)證錯(cuò)誤消息。

'custom' => [
     'email' => [
        'required' => 'We need to know your e-mail address!',
     ],
],

用 “now” or “yesterday” 來驗(yàn)證日期

您可以使用 before/after 的規(guī)則驗(yàn)證日期,并將各種字符串作為參數(shù)傳遞,比如: tomorrownowyesterday。例如: 'start_date' => 'after:now'。它在底層下使用 strtotime ()。

$rules = [
    'start_date' => 'after:tomorrow',
    'end_date' => 'after:start_date'
];

具有某些條件的驗(yàn)證規(guī)則

如果驗(yàn)證規(guī)則依賴于某些條件,則可以通過將 withValidator() 添加到 FormRequest 類中來修改規(guī)則,并在那里指定自定義邏輯。例如,如果您只想為某些用戶角色添加驗(yàn)證規(guī)則。

use Illuminate\Validation\Validator;
class StoreBlogCategoryRequest extends FormRequest {
    public function withValidator(Validator $validator) {
        if (auth()->user()->is_admin) {
            $validator->addRules(['some_secret_password' => 'required']);
        }
    }
}

更改默認(rèn)驗(yàn)證消息

如果要更改特定字段和特定驗(yàn)證規(guī)則的默認(rèn)驗(yàn)證錯(cuò)誤消息,只需將 messages() 方法添加到 FormRequest 類中。

class StoreUserRequest extends FormRequest
{
    public function rules()
    {
        return ['name' => 'required'];
    }

    public function messages()
    {
        return ['name.required' => 'User name should be real name'];
    }
}

預(yù)驗(yàn)證

如果你想在默認(rèn)的 Laravel 驗(yàn)證之前修改某個(gè)字段,或者,換句話說,“準(zhǔn)備” 那個(gè)字段, FormRequest 類中有一個(gè)方法 prepareForValidation () :

protected function prepareForValidation()
{
    $this->merge([
        'slug' => Illuminate\Support\Str::slug($this->slug),
    ]);
}

第一次驗(yàn)證錯(cuò)誤時(shí)停止

默認(rèn)情況下,將在列表中返回 Laravel 驗(yàn)證錯(cuò)誤,檢查所有驗(yàn)證規(guī)則。但是如果你想要在第一個(gè)錯(cuò)誤之后停止這個(gè)過程,使用驗(yàn)證規(guī)則叫做 bail :

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

不使用 validate () 或者 Form Request 就拋出 422

如果您不使用 validate () 或 Form Request,但仍然需要使用相同的 422 狀態(tài)碼和錯(cuò)誤結(jié)構(gòu)拋出錯(cuò)誤,那么可以手動(dòng)拋出 throw ValidationException::withMessages() :

if (! $user || ! Hash::check($request->password, $user->password)) {
    throw ValidationException::withMessages([
        'email' => ['The provided credentials are incorrect.'],
    ]);
}

規(guī)則取決于其他條件

如果您的規(guī)則是動(dòng)態(tài)的并且依賴于其他條件,那么您可以動(dòng)態(tài)地創(chuàng)建該規(guī)則數(shù)組。

    public function store(Request $request)
    {
        $validationArray = [
            'title' => 'required',
            'company' => 'required',
            'logo' => 'file|max:2048',
            'location' => 'required',
            'apply_link' => 'required|url',
            'content' => 'required',
            'payment_method_id' => 'required'
        ];

        if (!Auth::check()) {
            $validationArray = array_merge($validationArray, [
                'email' => 'required|email|unique:users',
                'password' => 'required|confirmed|min:5',
                'name' => 'required'
            ]);
        }
        //
    }


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)