如何在laravel 5.5中保存具有多个值的复选框

时间:2017-12-25 05:19:38

标签: php laravel vue.js

我在使用复选框保存多个项目时遇到困难,使用此代码我一次只能保存一个值。任何人都可以给我一个想法

控制器:

$crud = explode(',', $request->crud_selected);
    if (count($crud) > 0) {
     foreach ($crud as $x) {
        $slug = strtolower($x) . '-' . strtolower($request->resource);
        $display_name = ucwords($x . " " . $request->resource);
        $description = "Allows a user to " . strtoupper($x) . ' a ' . ucwords($request->resource);

        $permission = new Permission();
        $permission->name = $slug;
        $permission->display_name = $display_name;
        $permission->description = $description;
        $permission->save();
      }
      Session::flash('success', 'Permissions were all successfully added');
      return redirect()->route('permissions.index');
    }
  } else {
    return redirect()->route('permissions.create')->withInput();
  }

查看刀片:



<script>
 var app = new Vue({
      el: '#app',
      data() {
      return:{
       permissionType: 'basic',
        resource: '',
        crudSelected: []
      }
    }  
    });
   
</script>
&#13;
<div class="from-group" v-if="permissionType == 'crud'">
                <div class="checkbox-group" v-model="crudSelected">
                
                <label class="checkbox-inline"><input type="checkbox" name="crud_selected" value="create">Create</label>
                <label class="checkbox-inline"><input type="checkbox" name="crud_selected" value="read">Read</label>
                <label class="checkbox-inline"><input type="checkbox" name="crud_selected" value="message">Update</label>
                <label class="checkbox-inline"><input type="checkbox" name="crud_selected" value="message">Delete</label>
                </div>
                </div>
&#13;
&#13;
&#13;

任何想法如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

我已经设法找到答案,这是我如何更改控制器代码。

<强>旧

$crud = explode(',', $request->crud_selected);

 $crud = $request->input('crud_selected');

然后在我的视图刀片上,我将其添加到我的

name="crud_selected[]

Wallahh有效..

答案 1 :(得分:0)

您不需要爆炸值,因为复选框值返回数组。 v-model仅用于输入。

Form Input Bindings

<div class="from-group" v-if="permissionType == 'crud'">
       <div class="checkbox-group" >

            <label class="checkbox-inline"><input type="checkbox" v-model="crudSelected">Create</label>
            <label class="checkbox-inline"><input type="checkbox" v-model="crudSelected">Read</label>
            <label class="checkbox-inline"><input type="checkbox" v-model="crudSelected">Update</label>
            <label class="checkbox-inline"><input type="checkbox" v-model="crudSelected">Delete</label>
       </div>
</div>

答案 2 :(得分:0)

如果你想在复选框输入上取得超过选中的值,我认为你可以通过定义一个函数来调用复选框上的每个更改事件,例如像这样

<label class="checkbox-inline"><input type="checkbox" id ="checklval" name="crud_selected" v-model="crudSelected" v-on:change="trackcheck(Create)" :value="Create" >Create</label>

然后在你的vue组件脚本上你将实现这个功能, 我定义了一个名为ValArray的数组,它会在复选框上选中每个值,并且如果在复选框中没有选中此值,也会弹出它,如下所示:

trackcheck($labid) {
        if(document.getElementById('checklval').checked==true){
            this.ValArray.push($labid)
        } else if(document.getElementById('checklval' ).checked==false){
            this.ValArray.pop($labid)
        }
    }

现在,您将拥有一个数组,其中包含复选框输入中的每个选定值, 希望这能帮到你