Laravel 编码技巧 表单验证
图片验证
在验证上传的图片时,可以指定所需的尺寸。
['photo' => 'dimensions:max_width=4096,max_height=4096']
自定义验证错误的信息
只需在 resources/lang/xx/validation.php
文件创建适当的数组结构,就可以定义定每个 字段、规则和语言的验证错误消息。
'custom' => [
'email' => [
'required' => 'We need to know your e-mail address!',
],
],
用 “now” or “yesterday” 来验证日期
您可以使用 before/after 的规则验证日期,并将各种字符串作为参数传递,比如: tomorrow
, now
, yesterday
。例如: 'start_date' => 'after:now'
。它在底层下使用 strtotime ()。
$rules = [
'start_date' => 'after:tomorrow',
'end_date' => 'after:start_date'
];
具有某些条件的验证规则
如果验证规则依赖于某些条件,则可以通过将 withValidator()
添加到 FormRequest
类中来修改规则,并在那里指定自定义逻辑。例如,如果您只想为某些用户角色添加验证规则。
use Illuminate\Validation\Validator;
class StoreBlogCategoryRequest extends FormRequest {
public function withValidator(Validator $validator) {
if (auth()->user()->is_admin) {
$validator->addRules(['some_secret_password' => 'required']);
}
}
}
更改默认验证消息
如果要更改特定字段和特定验证规则的默认验证错误消息,只需将 messages()
方法添加到 FormRequest
类中。
class StoreUserRequest extends FormRequest
{
public function rules()
{
return ['name' => 'required'];
}
public function messages()
{
return ['name.required' => 'User name should be real name'];
}
}
预验证
如果你想在默认的 Laravel 验证之前修改某个字段,或者,换句话说,“准备” 那个字段, FormRequest
类中有一个方法 prepareForValidation ()
:
protected function prepareForValidation()
{
$this->merge([
'slug' => Illuminate\Support\Str::slug($this->slug),
]);
}
第一次验证错误时停止
默认情况下,将在列表中返回 Laravel 验证错误,检查所有验证规则。但是如果你想要在第一个错误之后停止这个过程,使用验证规则叫做 bail
:
$request->validate([
'title' => 'bail|required|unique:posts|max:255',
'body' => 'required',
]);
不使用 validate () 或者 Form Request 就抛出 422
如果您不使用 validate () 或 Form Request,但仍然需要使用相同的 422 状态码和错误结构抛出错误,那么可以手动抛出 throw ValidationException::withMessages()
:
if (! $user || ! Hash::check($request->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['The provided credentials are incorrect.'],
]);
}
规则取决于其他条件
如果您的规则是动态的并且依赖于其他条件,那么您可以动态地创建该规则数组。
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'
]);
}
//
}
更多建议: