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 对不起,如果不清楚 - 澄清:
我假设发生这种情况是因为如果未选中复选框,则元素不包含在发布数据中
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)
这应该足够了
echo Form::checkbox('test', 'true', Input::old('test', true));
Run Code Online (Sandbox Code Playgroud)
如果Input :: old()不存在,则返回true,即默认值.