php - 如何将未选中的复选框提交给 Controller

标签 php html laravel laravel-5 checkbox

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

现在在我的 Blade 上,我有一个带有各种输入“文本”“选择”“复选框”等的表单。当在 Controller 上提交表单时,我运行一个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') 但由于数据库表的动态特性,我不想在我的 Controller 上硬编码特定设置的名称。

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

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

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

最佳答案

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

<input type="hidden"   name="checkbox-1" value="0" /> 
<input type="checkbox" name="checkbox-1" value="1" /> My checbox 1 

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

注意:只需确保您首先添加隐藏字段,这样当该字段被选中时您将只收到选中的字段。

关于php - 如何将未选中的复选框提交给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827752/

相关文章:

php - 尝试在 php 中更新 mysql 数据库表单

php - 检索exercise_day等于当天的记录

php - 播放视频 - 服务器配置不正确 - 12939

php - 终端中从文件中提取文本的命令是什么

Laravel 5.5 - 将图像存储到 S3

laravel - 未找到列 : 1054 Unknown column 'remember_token' in 'field list' ?

java - 监听来自 Flash 的请求(获取/发布)

php - php中的乘法问题

html - 侧边栏在某些页面中移至底部但在其他页面中完美

javascript - 如何使用 Angular 设置默认选项?