在驗(yàn)證上傳的圖片時(shí),可以指定所需的尺寸。
['photo' => 'dimensions:max_width=4096,max_height=4096']
只需在 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!',
],
],
您可以使用 before/after 的規(guī)則驗(yàn)證日期,并將各種字符串作為參數(shù)傳遞,比如: tomorrow
, now
, yesterday
。例如: 'start_date' => 'after:now'
。它在底層下使用 strtotime ()。
$rules = [
'start_date' => 'after:tomorrow',
'end_date' => 'after:start_date'
];
如果驗(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']);
}
}
}
如果要更改特定字段和特定驗(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'];
}
}
如果你想在默認(rèn)的 Laravel 驗(yàn)證之前修改某個(gè)字段,或者,換句話說,“準(zhǔn)備” 那個(gè)字段, FormRequest
類中有一個(gè)方法 prepareForValidation ()
:
protected function prepareForValidation()
{
$this->merge([
'slug' => Illuminate\Support\Str::slug($this->slug),
]);
}
默認(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 狀態(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ī)則是動(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'
]);
}
//
}
更多建議: