首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在验证空值。拉威尔

正在验证空值。拉威尔
EN

Stack Overflow用户
提问于 2021-04-01 18:39:23
回答 4查看 101关注 0票数 0

我有一个动态添加/删除输入的表单,但是如果我添加了输入但没有输入任何内容,空值将被写入数据库,验证器不会捕获空值。谷歌没有发现类似的问题,相反,每个人都对如何通过验证器传递null感兴趣。也许我在谷歌上搜索得不好。

代码语言:javascript
复制
$request->validate([
    'properties' => 'required|min:1',
]);

属性字段:

代码语言:javascript
复制
<div class="input-group row">
                  <label for="category_id" class="col-sm-2 col-form-label">Product properties: </label>
                  <div class="row">
                      <div class="col-lg-12">
                          <div id="inputFormRow">
                            <div class="input-group mb-3">
                              @isset($product)
                                @foreach($product->properties as $prod)
                                    <input type="text" name="properties[][key]" value="{{ $prod['key'] ?? '' }}" class="form-control m-input editinp-key" placeholder="Key" autocomplete="off">
                                    <input type="text" name="properties[][value]" value="{{ $prod['value'] ?? '' }}" class="form-control m-input ml-3 editinp-value" placeholder="Value" autocomplete="off">
                                    <div class="input-group-append ml-3">
                                        <button id="removeRow" type="button" class="btn btn-danger">Remove</button>
                                    </div>
                                @endforeach
                              @endisset
                                @if(Session::has('properties'))
                                  @foreach(Session::get('properties') as $prop)
                                    <input type="text" name="properties[][key]" value="{{ $prop['key'] ?? '' }}" class="form-control m-input" placeholder="Key" autocomplete="off">
                                    <input type="text" name="properties[][value]" value="{{ $prop['value'] ?? '' }}" class="form-control m-input ml-3" placeholder="Value" autocomplete="off">
                                  <div class="input-group-append ml-3">
                                      <button id="removeRow" type="button" class="btn btn-danger">Remove</button>
                                  </div>
                                  @endforeach
                                @endif
                              </div>
                          </div>

                          <div id="newRow"></div>
                          <button id="addRow" type="button" class="btn btn-info">Add</button>
                      </div>
                  </div>
                </div>

jQuery:

代码语言:javascript
复制
$("#addRow").click(function () {
        var html = '';
        html += '<div id="inputFormRow">';
        html += '<div class="input-group mb-3">';
        html += '<input type="text" name="properties[][key]" class="form-control m-input ml-3" placeholder="Key" autocomplete="off">';
        html += '<input type="text" name="properties[][value]" class="form-control m-input ml-3" placeholder="Value" autocomplete="off">';
        html += '<div class="input-group-append ml-3">';
        html += '<button id="removeRow" type="button" class="btn btn-danger">Remove</button>';
        html += '</div>';
        html += '</div>';
        
        $('#newRow').append(html);
    });

  // remove row
  $('#removeRow').on('click', function () {
      $(this).closest('#inputFormRow').remove();
  });
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-01 20:34:24

假设您传递了一个带有keyvalue键的对象数组,您可以像这样验证您的请求:

代码语言:javascript
复制
$request->validate([
   'properties' => 'required|min:1',
   'properties.*.key' => 'required',
   'properties.*.value' => 'required',
]);
票数 1
EN

Stack Overflow用户

发布于 2021-04-01 18:54:16

也许可以使用Validator?

代码语言:javascript
复制
    $data = Validator::make($request->all(), [
        'properties' => ['present', 'string', 'min:1'],
    ]);
    if ($data->fails()) {
        $error_msg = "Validation failed, please reload the page";
        return Response::json($data->errors());
    }

从更多的评论中,我意识到你正在尝试做什么:它与我在这里所做的非常相似: page.blade.php:

代码语言:javascript
复制
<table class="table table-bordered" id="dynamic_field">
    @if ($errors->any())
        <tbody id="dynamic_field-1">
            @php $name_count = 1 @endphp
            @foreach (old('name') as $name)
                @if($name_count == 1)
                    <tr id="{{$name_count}}">
                        <td style="width: 90%; padding: 0px; position: relative;"><input style="position: absolute; top: 0px; left: 0px; height: 100%; border: none; border-radius: 0px;" type="text"    name="name[]"   value="{{old('name.'.($name_count-1))}}"  class="form-control  @error('name.'.($name_count-1)) is-invalid @enderror" maxlength="240"/></td>
                        <td style="width: 10%;"><button type="button" name="add"      id="add-1"                                class="btn btn-success">{{ __('Add More') }}</button></td>
                    </tr>
                @else
                    <tr id="row{{$i}}">
                        <td style="width: 90%; padding: 0px; position: relative;"><input style="position: absolute; top: 0px; left: 0px; height: 100%; border: none; border-radius: 0px;" type="text"    name="name[]"   value="{{old('name.'.($name_count-1))}}"  class="form-control  @error('name.'.($name_count-1)) is-invalid @enderror" maxlength="240"/></td>
                        <td style="width: 10%;"><button type="button" name="remove"   id="{{$i}}"                               class="btn btn-danger btn_remove">X</button></td>
                    </tr>
                @endif
                @php $i += 1 @endphp
                @php $name_count += 1 @endphp
            @endforeach
        </tbody>
    
    @else
        <tbody id="dynamic_field-1">
            <tr>
                <td style="width: 90%; padding: 0px; position: relative;"><input style="position: absolute; top: 0px; left: 0px; height: 100%; border: none; border-radius: 0px;" type="text"    name="name[]"  class="form-control" maxlength="240"/></td>
                <td style="width: 10%;"><button type="button"   name="add"      class="btn btn-success"  id="add-1" >{{ __('Add More') }}</button></td>
            </tr>
        </tbody>
    @endif
</table>

jQuery:

代码语言:javascript
复制
$(document).ready(function(){         
            var i = {{$i ? $i+=1 : '1'}};
            $('#add-1').click(function(){
                i++;
                $('#dynamic_field-1').append('<tr id="row'+i+'"><td style="width: 90%; padding: 0px; position: relative;"><input style="position: absolute; top: 0px; left: 0px; height: 100%; border: none; border-radius: 0px;" type="text"    name="name[]"  class="form-control" maxlength="240"/></td><td style="width: 10%;"><button type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td>  </tr> ');
            });
            $(document).on('click', '.btn_remove', function(){
                var button_id = $(this).attr("id");
                $('#row'+button_id+'').remove();
            });
        });

和控制器:

代码语言:javascript
复制
foreach($request->input('name') as $key => $value) {
            $rules["name.{$key}"] = array('string', 'max:255');
        }
        $data = Validator::make($request->all(),   $rules);
        if ($data->fails()) {
            return redirect()
                ->back()
                ->withErrors($data)
                ->withInput($request->input());
        }else{...
票数 1
EN

Stack Overflow用户

发布于 2021-04-01 18:49:12

你的描述不够清楚,无法理解。对于验证,您可以使用required|min:1|not_in:null来获取验证错误

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66903001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档