• laravel5.5表单验证


    1. 在第一次验证失败后停止#

    有时,你希望在某个属性第一次验证失败后停止运行验证规则。为了达到这个目的,附加 bail 规则到该属性:

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

    2. 嵌套参数

    如果你的 HTTP 请求包含一个 「嵌套」 参数(即数组),那你可以在验证规则中通过 「点」 语法来指定这些参数。

    $this->validate($request, [
        'title' => 'required|unique:posts|max:255',
        'author.name' => 'required',
        'author.description' => 'required',
    ]);
    

    3. AJAX 请求 & 验证#

    我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate 方法时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息的 JSON 响应。这个 JSON 响应会包含一个 HTTP 状态码 422 被发送出去。

    4. 表单请求

    创建文件

    php artisan make:request StoreBlogPost
    

    文件展示

    <?php
    
    namespace AppHttpRequests;
    
    use IlluminateFoundationHttpFormRequest;
    use IlluminateHttpRequest;
    
    class StoreServergroupPost extends FormRequest
    {
    
        //表单授权
        public function authorize()
        {
            //这里可以做一些权限验证
            //return false;
            return true;
        }
    
        public function rules(Request $request)
        {
            $rules = [ 
                'name' => 'required',
                'selectedMaster' => 'required',
                'selectedFailover' => 'required',
            ];  
            if($request->selectedFailover){
                $rules['selectedSlave'] = 'required';
                $rules['tableData'] = 'required';
            }   
            return $rules;
    
        }
    
        public function messages()
        {
            return [
                'name.required' => '请输入集群名称',
                'selectedMaster.required'  => '请选择主服务器',
                'selectedFailover.required'  => '请选择是否开启',
                'selectedSlave.required'  => '请选择从服务器',
                'tableData.required'  => '网卡信息不能为空',
            ];
        }
        
        //请求之后的钩子
        public function withValidator($validator)
        {
            $validator->after(function ($validator) {
                if ($this->somethingElseIsInvalid()) {
                    $validator->errors()->add('field', 'Something is wrong with this field!');
                }
            });
        }
    
    }
    

    控制器类上面引入

    use AppHttpRequestsStoreServergroupPost;
    

    控制器方法中使用此类

    //这里的类型提示不是Request了
    public function store(StoreServergroupPost $request)
    {
        // The incoming request is valid...
    }
    

    5. 两种方式

    • 1> 使用validate方法

    • 2> 手动创建验证器实例

    
    $v = Validator::make($input, $rule,$message);
    
    if($v->fails()){
       //return xxxx
    }
    

    还可以加验证后的钩子

    $validator = Validator::make(...);
    
    $validator->after(function ($validator) {
        if ($this->somethingElseIsInvalid()) {
            $validator->errors()->add('field', 'Something is wrong with this field!');
        }
    });
    
    if ($validator->fails()) {
        //
    }
    

    需要注意的是

    • 使用validate方法直接返回json,并且第一个参数是$request对象,
    • 手动创建的话可以使用$errors = $validator->errors()->toArray();获取错误信息

    6. 占位符

    :attribute 占位符会被验证字段的实际名称取代。除此之外,你还可以在验证消息中使用其他占位符。例如:

    $messages = [
        'same'    => 'The :attribute and :other must match.',
        'size'    => 'The :attribute must be exactly :size.',
        'between' => 'The :attribute must be between :min - :max.',
        'in'      => 'The :attribute must be one of the following types: :values',
    ];
    

    7. 获取错误消息

    $errors = $validator->errors();
    

    查看特定字段的第一个错误消息#

    echo $errors->first('email');
    

    如果你想以数组的形式获取指定字段的所有错误消息,则可以使用 get 方法:

    foreach ($errors->get('email') as $message) {
        //
    }
    

    如果要验证表单的数组字段,你可以使用 * 来获取每个数组元素的所有错误消息:

    foreach ($errors->get('attachments.*') as $message) {
        //
    }
    

    所有字段的错误消息,可以使用 all 方法:

    foreach ($errors->all() as $message) {
        //
    }
    

    判断特定字段是否含有错误消息#

    if ($errors->has('email')) {
        //
    }
    
  • 相关阅读:
    django 之 用户忘记密码的解决办法
    Django 富文本ckeditor 在模板中的实现
    MySQL密码的恢复方法
    sublime 快捷键
    linux 修改用户密码
    ubuntu 下重启 mysql
    python 控制浏览器模块
    读书笔记:从小工到专家(一)
    urlparse 模块
    python 标准内建函数
  • 原文地址:https://www.cnblogs.com/redirect/p/8435837.html
Copyright © 2020-2023  润新知