如何将未选中的复选框提交给控制器

好吧,首先我在数据库上有一个“设置”表,其中有“名称”和“值”字段,它是一种配置类型的表,其中的值可以是从字符串到布尔值等的任何值。


现在,在我的刀片上,我有一个带有各种输入的表单,其中包括“文本”,“选择”,“复选框”等。在控制器上提交表单时,我foreach为每个属性运行一个where,$request将其键作为名称存储,并将其值存储为它在数据库上的值。


$agency_id = Auth::user()->agency->id;

$settings = AgencySettings::whereAgencyId($agency_id)->get();

foreach ($request->except('_token') as $key => $value)

{

    $setting = $settings->where('name','=',$key)->first();

    if (boolval($setting))

    {

        $setting->value = $value;

        $setting->update();

    }else{

        $setting = new AgencySettings;

        $setting->agency_id = $agency_id;

        $setting->name = $key;

        $setting->value = $value;

        $setting->save();

    }

}

除了不在复选框内的未选中复选框外,其余一切都运行良好$request。我知道我可以像这样处理它们,$request->has('name_of_checkbox')但是由于数据库中表的动态性质,我不想在Controller上硬编码特定设置的名称。


我的目标是,无论我在前端使用的不同设置的数量如何,Controller上的代码都将相同(也许将来会需要添加更多设置)。


所以我的问题是,有没有一种方法可以在服务器端处理这些复选框而不必专门引用它们,或者有一种无论状态如何始终将复选框的值返回给服务器的方法?


我的第一个想法是使用javascript和隐藏的输入,但是也许有更好的方法。


蛊毒传说
浏览 150回答 2
2回答

慕哥9229398

您可以在每个要接收的复选框之前添加一个具有相同名称的隐藏字段,例如:<input type="hidden"&nbsp; &nbsp;name="checkbox-1" value="0" />&nbsp;<input type="checkbox" name="checkbox-1" value="1" /> My checbox 1&nbsp;如果未选中该字段,则将发送带有0值的隐藏字段,而选中该字段时,将发送正确的真实值。注意:确保您首先添加隐藏的字段,以便在选中该字段时收到已选中的字段。

拉丁的传说

另一种解决方案是简单地检查post数组中是否设置了“ checkbox-1”的值。因此,您将在控制器端将default设置为0并检查值是否存在,而不是检查它是0还是1。
打开App,查看更多内容
随时随地看视频慕课网APP