【发布时间】:2019-09-13 14:45:43
【问题描述】:
好的,首先我的数据库中有一个“设置”表,其中有“名称”和“值”字段,它是一种配置类型的表,其中值可以是从字符串到布尔值等的任何内容。
现在在我的刀片上,我有一个包含各种输入“文本”“选择”“复选框”等的表单。在控制器上提交表单时,我运行 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();
}
}
除了$request 中未选中的复选框外,其他一切都很好。
我知道我可以像 $request->has('name_of_checkbox') 那样处理它们,但由于数据库表的动态特性,我不想在我的控制器上硬编码特定设置的名称。
我的目标是无论我在前端使用多少不同的设置,我的控制器上的代码都是相同的(也许将来需要添加更多)。
所以我的问题是,有没有一种方法可以在服务器端处理这些复选框而无需专门引用它们,或者有一种方法可以始终将复选框的值返回给服务器,尽管它处于状态?
我的第一个想法是使用 javascript 和隐藏输入,但也许有更好的方法。
【问题讨论】:
-
如果您想在每个请求中使用复选框的值,您必须使用 javascript 来发送请求。当一个复选框不包含在标准发布请求中时。
-
你的意思是使用ajax请求?
-
是的,或者您可以设置隐藏输入,设置为“开”或“关”或任何您喜欢的值,并让该值代表复选框值。
-
是的,这也是我的方法,感谢您的信息!
标签: php html laravel laravel-5 checkbox