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

The*_*los 3 html php checkbox laravel laravel-5

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

现在,我的刀,我有各种输入表单“文本”,“选择”,“复选框”等在提交控制器上的形式,我跑一个foreach地方的的每个属性$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();
    }
}
Run Code Online (Sandbox Code Playgroud)

除了不在$request. 我知道我可以像这样处理它们,$request->has('name_of_checkbox')但由于数据库表的动态特性,我不想在我的控制器上硬编码特定设置的名称。

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

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

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

Zak*_*rki 6

您可以在要接收的每个复选框之前添加一个具有相同名称的隐藏字段,例如:

<input type="hidden"   name="checkbox-1" value="0" /> 
<input type="checkbox" name="checkbox-1" value="1" /> My checbox 1 
Run Code Online (Sandbox Code Playgroud)

这将在字段未选中时发送具有 0 值的隐藏字段,并在选中时发送正确的真实值。

注意:只需确保首先添加隐藏字段,以便在选中该字段时只会收到选中的字段。

  • 如此正确,没有 javascript 代码,聪明的答案,非常感谢!! (2认同)