2016-11-22 131 views
0

如果验证表单请求失败,但如果用户未提交表单,那么使用数据库中的默认值,如何重新填充复选框?Laravel Blade - 如果验证失败,重新填充复选框?

假设我们有名称输入字段和复选框。

输入名称

<input type="text" name="name" value="{{ old('name', $delivery->name) }}"> 

复选框:

<input type="checkbox" name="use_shipping" @if(old('use_shipping', $delivery->use_shipping) == "1") checked="checked" @endif value="1"> 

输入的名称字段是否正常工作重新填充通过数据库中的值或重新填充值,如果验证请求失败。

如果验证失败,该复选框不重新填充。如何解决这个问题?

例如,如果我没有输入名称(输入字段),我取消选中了use_shipping复选框 - 它应该在提交表单(验证失败)后重新填充复选框。

+0

什么是'value'属性后的额外双引号(“) – Michel

+0

@Michel Oop我编辑了这个问题,问题仍然存在 –

回答

2

出现这种情况,是因为浏览器不追加非勾选后数据中的复选框,因此在重新填充表单时使用$delivery->use_shipping的值。

您可以添加一个隐藏的输入与use_shipping“默认”值来解决这个问题:

<input type="hidden" name="use_shipping" value="0"> 
<input type="checkbox" name="use_shipping" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked="checked"' : '' }}> 

这会工作得很好,当复选框被选中,是因为后者的值将覆盖前者。

-1

试试这个:

<input type="checkbox" name="use_shipping" @if(old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) checked @endif value="{{ old('use_shipping') || (old('use_shipping', null) == null && $delivery->use_shipping)) }}"> 

*使用运输应该是一个布尔

+0

我不认为这会起作用 - 'checked'不接受一个值。 –

+0

这不行,我们需要通过'$ delivery-> use_shipping'来检查默认值,如果表单没有被提交,如果表单已经提交并且验证失败,它需要通过'旧的()' –

+0

Ooooh,我已经更新了我的答案,希望对你有帮助 –

0

这应该做的伎俩:

<input name="use_shipping" type="checkbox" value="1" {{ old('use_shipping', $delivery->use_shipping) ? 'checked' : '' }} />

+0

同样的事情,如果验证失败,它不会重新填充复选框,如果验证失败,它会从数据库中重新编译而不是旧的值。 –