首页 > 解决方案 > Laravel - 有没有更好的方法来检查带有刀片中用户先前输入值的复选框?

问题描述

我有一个复选框

<input type="checkbox" name="example">

由于验证失败,用户提交表单并返回,所以我想显示复选框的先前状态

<input
    type="checkbox"
    name="example"
    {!! old('example') ? 'value="1" checked' : 'value="0"' !!}>

这里的第一个问题是,现在如何处理验证?如果是,0或者1我会添加布尔验证,但现在第一次是on,之后是0or 1

有人可能会说,如果您{!! old('example') ? 'value="1" checked' : 'value="0"' !!}最初使用它,它的价值将on不再存在。

所以我的第一个问题变成了这个:最初的值为old('example')null 所以复选框没有选中属性,复选框的值为0. 现在,当用户提交表单时,该表单old('example')具有值(IT IS NOT NULL),因此这次复选框已选中属性,并且它的值是不可取的1

========

我遇到的另一个问题是,如果old('example')有真值(这意味着用户已经选中了复选框),我应该放一些东西来检查复选框。但它还没有完成。我想检查example数据库中的值,所以如果old('example')有错误值(这意味着用户没有选中复选框)我想检查 的值example,如果它的值是1检查复选框并设置值复选框为 1 否则为 0。所以我想到的是:

<input
    type="checkbox"
    name="example"
    value="{!! old('example', isset($collection) ? $collection->example : null) == '1' : '1' : '0' !!}">

现在的问题是那old('example')将是on或什么都不是。的值$collection->example将是10或空。因此,如果我将它与 '1' 进行比较,即使old('example')为真,它也不会为真,同样,如果我将它与 进行比较,on即使 的值为真,它也不会$collection->example为真。所以让我们这样做:

@if(old('example') == 'on' || (isset($collection) && $collection->example))
    <input type="checkbox" name="example" value="on" checked="checked">
@else
    <input type="checkbox" name="example">
@endif

通过上面的这段代码,问题得到了解决。但是还有其他更好的方法吗?

所以我的问题是如何处理后端的验证,当然还有如何在不涉及 jQuery 之类的情况下以更好的方法处理前端的复选框?

标签: laravelcheckbox

解决方案


我想它会解决你的问题试试看。

刀片文件:

<input type="checkbox" name="example" value="{{ old('example') ?? '1' }}"
  {{ old('example') == '1' ? 'checked' : null }} required>

required 将强制用户选中前端的复选框,而在后端,您可以使用 required 验证,因为我们不能信任前端验证。

控制器:

public function store(Request $request)
{
    $request->validate([
        'example' => 'required',
    ]);
}

推荐阅读