Checkbox 未选中复选框,带“0”;输入::old();
我正在视图中创建一个复选框:Checkbox 未选中复选框,带“0”;输入::old();,checkbox,laravel,laravel-4,Checkbox,Laravel,Laravel 4,我正在视图中创建一个复选框: Form::checkbox('test', 'true', Input::old('test', true)); 取消选中该框、提交表单并重定向回后: return Redirect::back()->withInput()->withErrors($validation); 该复选框仍处于选中状态-可能是因为“Input::old”中不存在'test',因此它将恢复为默认值 有没有关于如何最好地实现这一目标的建议 编辑: 我想出了一个有点老套的方
Form::checkbox('test', 'true', Input::old('test', true));
取消选中该框、提交表单并重定向回后:
return Redirect::back()->withInput()->withErrors($validation);
该复选框仍处于选中状态-可能是因为“Input::old”
中不存在'test'
,因此它将恢复为默认值
有没有关于如何最好地实现这一目标的建议
编辑:
我想出了一个有点老套的方法来获得我想要的结果:
$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);
我将把它写进一个函数中以供重用,但这似乎有点痛苦,所以任何评论/建议都会很好
编辑2
抱歉,如果不清楚-要澄清:
我假设发生这种情况是因为如果未选中复选框,则post数据中不包含元素,这就足够了
echo Form::checkbox('test', 'true', Input::old('test', true));
如果Input::old()不存在,它将返回默认值true。为什么不执行以下操作:
echo Form::checkbox('payment_method[]', 'credit');
{Form::checkbox('turnboond','normal',in_array('normal',$last_turnboond',array('id'=>'turnboond''normal','class'=>'turnboond'))}
这对我来说也有点困惑。但我就是这么做的
在我的控制器中
Session::flash('test', Input::get('test') ? 'true' : 'false');
在我看来
<?php $test = Session::get('test'); ?>
<input type="checkbox" id="test" name="test" value="true" <?php echo is_null($test) ? 'checked' : ($test == 'true' ? 'checked' : ''); ?> />
我对同一问题的解决方案:
1) 从验证中删除该复选框。从逻辑上讲,这没有什么区别
2) 在我的控制器更新函数中,我添加了一个if语句,该语句使用isset来确定值是否已发送(如果未发送,则未检查该值,因此为false)
复选框和会话不匹配是一个错误,已在Laravel 4中更正。以下代码应保留重定向时的复选框:
echo Form::checkbox('payment_method', 'credit');
对于分组复选框,请使用类似以下内容:
echo Form::checkbox('payment_method[]', 'credit');
这也应该起作用
**显然,你会想用你自己的属性来取代付款方式和信用。我也有同样的问题。事实证明,这是因为我遵循了关于如何发布未选中复选框的说明,上面说:
echo Form::hidden('name', 0);
echo Form::checkbox('name', 1);
问题是表单验证失败时,如果选中复选框,Laravel将使用旧值重新填充“隐藏”和“复选框”字段,因此隐藏字段将始终提交1而不是0。简单的解决方案是为隐藏字段编写HTML,而不是使用表单帮助器:
echo '<input type="hidden" name="name" value="0">';
echo Form::checkbox('name', 1);
echo';
echo表单::复选框('name',1);
我也有同样的问题
我是这样修好的
Form::checkbox('test', 'true', Input::old() ? Input::old('test', false) : true);
希望这会有帮助。我也有同样的问题。我最终创建了以下帮助器函数:
function is_checked(string $name, $value, $default) : string
{
$current_defaults = Input::old() ? old($name, 0) : $default;
return ($value == $current_defaults) ? 'checked' : '';
}
<input type="checkbox" name="is_acrive" value="1"
{{ is_checked('is_active', 1, $user->is_active) }}>
函数已选中(字符串$name、$value、$default):字符串
{
$current_defaults=Input::old()?old($name,0):$default;
返回($value==$current\u defaults)?“选中”:“”;
}
是否处于活动状态)}}>
多个复选框版本:
function is_checked_multiple(string $name, $value, $defaults) : string
{
$current_defaults = Input::old() ? old($name, []) : (array)$defaults;
return in_array($value, $current_defaults) ? 'checked' : '';
}
@foreach ($plans as $plan)
<input type="checkbox" name="plans[]" value="{{ $plan->id }}"
{{ is_checked_multiple('plans', $plan->id, $user->plans->pluck('id') }}>
@endforeach
函数已选中\u多个(字符串$name,$value,$defaults):字符串
{
$current_defaults=Input::old()?old($name,[]):(数组)$defaults;
在数组中返回($value,$current\u默认值)?“选中”:“”;
}
@foreach($计划作为$计划)
id$user->plans->PULL('id')}>
@endforeach
感谢您的回复,但您是否已对此进行了测试?如果我取消选中复选框并提交,那么当表单重新加载时,它就会被选中-因为Input::old('test')没有exist@GuyIncognito这是因为Laravel的表单生成器检查会话以及是否存在任何旧表单数据<代码>如果(isset($this->session)&&!$this->oldInputIsEmpty()&&is_null($this->old($name)),返回falseFormBuilder.php第639行遵循了哪些说明?这里的一条评论中提到了这一点:Tnx,这为我修复了它。使用(旧的('active',$slide->active±1)==1)?true:false,基本上说:如果oldInput>Slide>1==1,则为true,否则为false。“??”可用作isset的简写,在某些内容不可用时提供另一个值。我正在尝试您的第一个函数,发现错误未找到类“Input”
Input
已弃用。改用Request
或Request()
。