【问题标题】:Duplicate form validation errors on click submit in Laravel在 Laravel 中单击提交时重复的表单验证错误
【发布时间】:2021-03-23 11:40:23
【问题描述】:

我的项目中有一个注册表单,我正在服务器端对其进行验证。如果任何字段为空,则会显示 Register Controller 中定义的验证错误。问题是如果最终用户再次点击提交,同样的错误会重复,看起来很奇怪。 我该如何解决?

注册刀片

    <form id="register_forms" style="display:none" action="{{route('register' , app()->getLocale())}}">
      @csrf
       <div>
        <label for="register_name"></label>
          <input placeholder="name" id="register_name" type="text" class="form-control input @error('register_name') is-invalid @enderror" name="register_name" value="{{ old('register_name') }}" required autocomplete="register_name" autofocus/>
    
          @error('register_name')
           <span class="invalid-feedback" role="alert"><strong>{{ $message }}</strong></span>
          @enderror
       </div>
    
    
       <div>
        <label for="register_email"></label>
         <input placeholder="email" id="register_email" type="email" class=" input form-control @error('register_email') is-invalid @enderror" name="register_email" value="{{ old('register_email') }}" required autocomplete="register_email"/>
    
          @error('register_email')
           <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong></span>
          @enderror
       </div>


  <div class="some-class">
   <input  id="user_type_private" value="user" type="radio" class="radio" name="user_type" >
   <label  for="user_type_private">private</label>
    <input id="user_type_company" value="company" type="radio" class="radio" name="user_type" >
    
   <label  for="user_type_company">{{ __('Company')}}</label>
      @error('user_type')
       <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong></span>
      @enderror

    </div>
    
       <input id="my-register" type="submit" value="submit">
    
     </form>

JavaScript

<script>
  $("#my-register").click(function(e){
     e.preventDefault();
     $.ajaxSetup({
     headers: {
                   'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
               }
           });
            $.ajax({
        type: "post",
      url: "{{ route('register') }}",
      data: $('#register_forms').serialize(),
      dataType: 'json',
      success: function(data) {
            window.location = "https://carchainclassics.com/login";
        },
        error: function (err) {
            if (err.status == 422) {
                console.log(err.responseJSON);
                $('#success_message').fadeIn().html(err.responseJSON.message);

                $.each(err.responseJSON.errors, function (i, error) {
                    grecaptcha.reset();
                    var el = $(document).find('[name="'+i+'"]');
                    el.after($('<span style="color: #ff0000;">'+error[0]+'</span>'));
                });
            }
        }
    });
        });
</script>

控制器

protected function validator(array $data)
{
    $validator = Validator::make($data, [
        'register_name' => ['required', 'string', 'max:35'],
        'register_email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
         'user_type' => ['required',Rule::in(['user', 'company']),],
    ]);
    $validator->setAttributeNames([
        'register_email' => 'email'
    ]);

    return $validator;
}

【问题讨论】:

  • 您正在追加 (el.after),这意味着您每次都会添加一个新副本。也许您应该创建一个元素来保存错误消息(开始时为空),您可以在每次提交后替换其内容。
  • 根据@El_Vanja 的评论,您还可以更改错误消息的可见性。

标签: php laravel


【解决方案1】:

您只需要在每次请求之前清空 html。在您的 jquery ajax 中添加以下代码以清除消息。为每个消息跨度添加一类消息。

beforeSend: function(data) {
            window.location = "https://carchainclassics.com/login";
    $('.message').empty();
},

error: function (err) {
    if (err.status == 422) {
    console.log(err.responseJSON);
                    
    $('#success_message').fadeIn().html(err.responseJSON.message);

    $.each(err.responseJSON.errors, function (i, error) {
            grecaptcha.reset();
            var el = $(document).find('[name="'+i+'"]');
            el.after($('<span class="message" style="color: #ff0000;">'+error[0]+'</span>'));
        });
    }
}

【讨论】:

  • 它对我有用,但还剩下最后一件事。我刚刚添加了单选按钮来选择 user_type 并将验证添加到控制器中,但它在单击提交按钮时显示了两个验证错误。您能否重新检查我上面的问题并提出我做错了什么?
  • 错误是“user field is required”但是出现两次不是一次,不知道为什么..
  • 你确定吗?您没有对 user 字段进行任何验证。
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多