好吧,首先我在数据库上有一个“设置”表,其中有“名称”和“值”字段,它是一种配置类型的表,其中的值可以是从字符串到布尔值等的任何值。
现在,在我的刀片上,我有一个带有各种输入的表单“文本”,“选择”,“复选框”等。当在控制器上提交表单时,我运行一个foreach
,其中{{1 }}我将其密钥存储为名称,并将其值存储为数据库中的值。
$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
这样处理它们,但是由于数据库中表的动态性质,我不想在Controller上硬编码特定设置的名称。
我的目标是,无论我在前端使用多少不同的设置,Controller上的代码都将相同(也许将来会需要添加更多设置)。
所以我的问题是,有没有一种方法可以在服务器端处理这些复选框而不必专门引用它们,或者有一种无论状态如何始终将复选框的值返回给服务器的方法?
我的第一个想法是使用javascript和隐藏的输入,但是也许有更好的方法。
答案 0 :(得分:4)
您可以在每个要接收的复选框之前添加一个具有相同名称的隐藏字段,例如:
<input type="hidden" name="checkbox-1" value="0" />
<input type="checkbox" name="checkbox-1" value="1" /> My checbox 1
这将在未选中该字段时发送带有0值的隐藏字段,并在选中它时发送正确的真实值。
注意::只需确保首先添加了隐藏字段,以便在选中该字段时只收到选中的字段。
答案 1 :(得分:0)
其他解决方案是简单地检查post数组中是否设置了“ checkbox-1”的值。 因此,您将在控制器端将default设置为0,然后检查值是否存在,而不是检查它是0还是1。
(男)