【问题标题】:How to submit unchecked checkboxes to controller如何将未选中的复选框提交给控制器
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

  • 没错,没有javascript代码,聪明的回答,非常感谢!!
  • 即使没有隐藏输入也应该可以工作,我认为只需设置零默认值! &lt;input type="checkbox" name="checkbox-1" value="0" /&gt;
  • 不确定您的意思?
  • 这个解决方案有多可靠? IE。是什么阻止浏览器以不同的顺序发送字段来破坏这个技巧?
  • 你可能需要反问,什么会让浏览器摇晃我的字段顺序? (因为他们从不这样做)。
【解决方案2】:

其他解决方案是简单地检查是否在 post 数组中设置了“checkbox-1”的值。 因此,您将在控制器端将默认值设置为 0 并检查值是否存在,而不是检查它是 0 还是 1。

(米)

【讨论】:

  • 我的目标是,无论我在前端使用多少不同的设置,我的控制器上的代码都是相同的再次仔细阅读问题。
  • 或者,如果是复选框数组,您可以为每个配置使用特定值,例如“可以保存”= 1,“可以加载”= 2,然后您通过请求进入控制器并使用按价值(考虑独特)。取决于你喜欢哪个职责,有预定义的值(常量),或者“重复”输入。
  • 因此,如果您采用建议的方法,关键在于将配置传输到您的查看器。您仍然可以通过从配置中生成“名称”值来检查控制器中是否存在值并保持配置灵活性。
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2016-01-31
  • 2015-09-30
相关资源
最近更新 更多