Laravel 编码技巧 表单验证

2023-02-16 17:10 更新

图片验证

在验证上传的图片时,可以指定所需的尺寸。

['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 的规则验证日期,并将各种字符串作为参数传递,比如: tomorrownowyesterday。例如: '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'
            ]);
        }
        //
    }


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号