Laravel 3 - 如何验证复选框数组,至少检查1次?

时间:2013-05-01 21:18:04

标签: laravel laravel-3

我开始学习Laravel并且还在学习曲线上。现在我开始使用Laravel 3,但是一旦我开始工作,很可能会将我的项目转换为Laravel 4。 现在的问题是,如何验证一个复选框数组,我想验证组内至少有1个是启用(选中)。我在Laravel论坛上的某个地方读到我们只是使用必需的方法验证它们,但是当我dd(input::all())我没有看到任何其他内容,但输入字段和复选框不属于它们...

我的部分刀片为复选框创建代码:

<label class="checkbox">{{ Form::checkbox('changeReasons[]', 'ckbCRCertification', Input::had('ckbCRCertification'), array('id' => 'ckbCRCertification')) }} Certification</label>
<label class="checkbox">{{ Form::checkbox('changeReasons[]', 'ckbCRDesignCorrection', Input::had('ckbCRDesignCorrection'), array('id' => 'ckbCRDesignCorrection')) }} Design Correction</label>

我的控制器(REST)代码是:

public function post_create()
{
    print "Inside the post_create()";
    // validate input
    $rules = array(
        'ecoNo'             => 'min:4',
        'productAffected'   => 'required',
        'changeReasons'     => 'required'
    );

    $validation = Validator::make(Input::all(), $rules);

    if($validation->fails())
    {
        return Redirect::back()->with_input()->with_errors($validation);
    }

    $eco = new Eco;

    $eco->ecoNo = Input::get('ecoNo');
    $eco->productAffected = Input::get('productAffected');

    $eco->save();

    return Redirect::to('ecos');
}

我还想知道在验证失败后获取复选框状态的正确代码,我以为我在某处看到了Input::had(checkBoxName),但这似乎不起作用,我可能没有正确使用它我对此感到有些困惑,因为我看到的所有例子都是输入而没有别的。我假设L4中的验证大致相同,不是吗?

2 个答案:

答案 0 :(得分:3)

回到这个项目并进行更多的研究,我发现这个问题的最佳方法如下。

我的刀片视图:

<div class="control-group row-fluid">
    <?php $arrChangeReasons =  Input::old('changeReasons', array()); // array of enable checkboxes in previous request ?>

    <label class="checkbox">{{ Form::checkbox('changeReasons[]', 'certification', in_array('certification', $arrChangeReasons)) }} Certification</label>
    <label class="checkbox">{{ Form::checkbox('changeReasons[]', 'designCorrection', in_array('designCorrection', $arrChangeReasons)) }} Design Correction</label>
</div>

对刀片视图的说明是一个两步流程,在验证发生后,如下:

  1. 使用Input::old
  2. 拉出复选框数组(在我的情况下为'changeReasons []')
  3. 然后,我们可以从该数组搜索单个复选框,看看它们是否存在,如果是,则将复选框更改为checked状态。这是in_array()函数的工作,返回true / false将改变复选框的状态。
  4. 我的控制器(REST)代码与我在开头的问题中编写的代码完全相同。有关详细信息,定义$rules = array('changeReasons' => 'required');将确保至少有一个复选框为checked

答案 1 :(得分:0)

请记住,Checkbox需要一个像这样的值。 选中复选框Input :: get('foo')将返回1,但如果未选中它将不返回任何内容,因为它不在后数组中。

我正在使用此代码:

if(Input::get('foo')){
    $bar->is_foo = 1;
}
else{
    $bar->is_foo = 0;
}