关键词搜索

源码搜索 ×
×

Laravel 表单验证 使用技巧

发布2021-11-16浏览833次

详情内容

表单验证

怎么设置动态的验证规则?

如果我们的限制规则是动态依赖于其他条件的,那么我们可以动态地创建规则数组

    public function save(Request $request)
    {
        $validationArray = [
            'title' => 'required',
            'name' => 'required',
            'logo' => 'file|max:1024',
            'position' => 'required',
        ];

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

    自定义抛出422状态码

    如果我们不使用 validate () 或 Form Request,但仍然需要使用相同的 422 状态码和错误结构抛出错误,那么可以手动抛出 throw ValidationException::withMessages()

    这个功能真的是用不到的时候没感觉,用到的时候觉得真优雅~

    if (! $user || ! Hash::check($request->password, $user->password)) {
        throw ValidationException::withMessages([
            'email' => ['邮箱格式不正确'],
        ]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    图片验证

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

    ['image' => 'dimensions:max_width=1096,max_height=1096']
    
    • 1

    自定义验证错误的信息

    我们只需在 resources/lang/xx/validation.php 文件创建适当的数组结构,就可以定义每个 字段、规则和语言的验证错误消息。

    'custom' => [
         'email' => [
            'required' => '电子邮箱必填',
         ],
    ],
    
    • 1
    • 2
    • 3
    • 4
    • 5

    某些条件的验证规则

    如果验证规则依赖于某些条件,则可以通过将 withValidator() 添加到 FormRequest 类中来修改规则,并在那里指定自定义逻辑。

    例如,如果我们只想为某些用户角色添加验证规则。

    use Illuminate\Validation\Validator;
    
    class XxxxxRequest extends FormRequest {
    
        public function withValidator(Validator $validator) {
            if (auth()->user()->is_admin) {
                $validator->addRules(['xxxx' => 'required']);
            }
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    更改默认验证消息

    如果要更改特定字段和特定验证规则的默认验证错误消息,只需将 messages() 方法添加到 FormRequest 类中。

    class UserRequest extends FormRequest
    {
        public function rules()
        {
            return ['name' => 'required'];
        }
     
        public function messages()
        {
            return ['name.required' => '请填写姓名'];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    预验证

    我们想在默认的 Laravel 验证之前修改某个字段,(类似常用的beforeXxx(){}、afterXxx(){})

    FormRequest 类中有一个方法 prepareForValidation () , 能实现我们的需求:

    在验证之前修改字段

    protected function prepareForValidation()
    {
        $this->merge([
            'myBlog' => Illuminate\Support\Str::slug($this->myBlog),
        ]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第一次验证错误时就终止程序

    默认情况下,将在列表中返回 Laravel 验证错误,检查所有验证规则。

    但是如果我们想要在第一个错误之后终止这个过程,使用验证规则叫做 bail:

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

    Last but not least

    想进技术交流群的同学欢迎添加我的微信 wangzhongyang0601 ,一起学习,一起进步。

    感谢大家的点赞、评论、关注;谢谢大佬们的支持,感谢 ღ( ´・ᴗ・` )比心

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载