【问题标题】:laravel validation system stop the insertion even the field is hidden by jQuery即使字段被 jQuery 隐藏,laravel 验证系统也会停止插入
【发布时间】:2020-09-29 13:42:59
【问题描述】:

在一个表单中,我有一个选择类别,它允许您根据要在选择类别中选择的类型隐藏或显示输入。 这种形式是插入广告标题或名称使用验证系统,当我点击按钮插入时,验证系统会检查其他值,即使它被jQuery隐藏,然后它会停止插入如何解决这个问题。

create.blade.php

<div class="form-group">
  <label>Categories <span class="text-hightlight">*</span></label>
  <select class="form-control" name="category_id" id="category_id">
    <option>select</option>
    <option value="1">titre</option>
    <option value="2">name</option>
  </select>
</div>
<div class="form-group" id="divt">
  <label>titre <span class="text-hightlight">*</span></label>
  <input type="text" name="titre" class="form-control"/>
</div>
<div class="form-group" id="divn">
  <label>name <span class="text-hightlight">*</span></label>
  <input type="text" name="name" id="name" class="form-control"/>
</div>

jQuery

<script>
  $(document).on('change', '#category_id', function() {
    var stateID = $(this).val();
    alert(stateID);
    if (stateID == '1') {
      $("#divn").hide();
      $("#divt").show();
    } else if(stateID == '2') {
      $("#divt").hide();
      $("#divn").show();
    }   
  });  
</script>

AdsController.php

public function store(Request $request) {
  $this->validate($request, [
    'titre' => ['bail','required', 'string','min:3', 'max:255'],
    'name' => ['bail','required', 'string','min:3', 'max:255'],
  ]);

  $ads= new Ads($request->all());
  $ads->save();
        
  return Redirect::to("/")
  ->withSuccess('Great! file has been successfully uploaded.');
}

【问题讨论】:

    标签: php laravel validation


    【解决方案1】:

    通过 CSS 隐藏元素不会将它们从 DOM 中删除。因此,即使字段不可见,也会提交。

    试试这样的:

    public function store(Request $request)
    {
        $this->validate($request, [
            'field' => ['bail', 'required', 'in:1,2'],
            'titre' => ['bail', 'required_without:name', 'string','min:3', 'max:255'],
            'name' => ['bail', 'required_without:titre', 'string','min:3', 'max:255'],
        ]);
    
        Ads::create($request->all());
    
        return Redirect::to("/")
            ->withSuccess('Great! file has been successfully uploaded.');
    }
    

    【讨论】:

    • 谢谢你的回答,但它给了我错误Method Illuminate\Http\Request::validated does not exist.
    • 只要在模型中定义了可填充数组,就可以使用$request-&gt;all()。我已经更新了我的答案。
    【解决方案2】:

    我建议使用验证规则exclude_unlesscategory_id 的值,这样它很容易扩展。这还有一个优点,即它从验证值数组中排除了该值,并且它仍然与category_id 有逻辑和视觉联系,这与 Tharindu 的示例相反。

    $validatedData = $this->validate($request, [
        'titre' => ['bail', 'exclude_unless:category_id,1', 'required', 'string', 'min:3', 'max:255'],
        'name' => ['bail', 'exclude_unless:category_id,2', 'required', 'string', 'min:3', 'max:255'],
    ]);
    
    Ads::create($validatedData);
    

    【讨论】:

    • 谢谢你的回答,但它给了我错误Method Illuminate\Http\Request::validated does not exist.
    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多