未选中复选框,带"Input :: old()"

Guy*_*ito 5 checkbox laravel laravel-4

我正在视图中创建一个复选框:

Form::checkbox('test', 'true', Input::old('test', true));
Run Code Online (Sandbox Code Playgroud)

取消选中此框后,提交表单并重定向回来:

return Redirect::back()->withInput()->withErrors($validation);
Run Code Online (Sandbox Code Playgroud)

复选框仍然被选中 - 大概是因为'test'它不存在"Input::old"所以它恢复到默认值.

有关如何最好地实现这一点的任何建议?

编辑:

我想出了一个有点hacky的方法来获得我想要的结果:

$isChecked = true; // The default state
// Check if the form has been returned "withInput"
if(Input::old())
{
    $isChecked = Input::old('test', false); // If the field has old data available use that, otherwise it is unchecked
}
echo Form::checkbox('test', 'true', $isChecked);
Run Code Online (Sandbox Code Playgroud)

我会把它写成一个可重用的函数,但它似乎有点痛苦所以任何评论/建议都会很棒

编辑2 对不起,如果不清楚 - 澄清:

  1. 表单已加载复选框已选中
  2. 我取消选中该复选框并提交表单
  3. 表单没有验证,所以我返回到表单
  4. 该复选框已经重新检查了自己 - 根据用户提交的数据,我希望它不会被选中

我假设发生这种情况是因为如果未选中复选框,则元素不包含在发布数据中

GTC*_*ais 10

我有同样的问题.事实证明这是因为我按照说明如何发布未经检查的复选框,其中说:

echo Form::hidden('name', 0);
echo Form::checkbox('name', 1);
Run Code Online (Sandbox Code Playgroud)

这个问题是在表单验证失败时,如果选中复选框,Laravel将使用旧值重新填充"隐藏"和"复选框"字段,因此您的隐藏字段将始终提交1而不是0.简单的解决方案只是为隐藏字段编写HTML而不是使用表单助手:

echo '<input type="hidden" name="name" value="0">';
echo Form::checkbox('name', 1);
Run Code Online (Sandbox Code Playgroud)


Ant*_*iro 5

这应该足够了

echo Form::checkbox('test', 'true', Input::old('test', true));
Run Code Online (Sandbox Code Playgroud)

如果Input :: old()不存在,则返回true,即默认值.

  • 谢谢你的回复,但你测试了吗?如果我取消选中该复选框并提交,则会在表单重新加载时检查 - 我相信因为Input :: old('test')不存在 (5认同)