Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Checkbox 未选中复选框,带“0”;输入::old();_Checkbox_Laravel_Laravel 4 - Fatal编程技术网

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()