2013-05-01 47 views
4

我开始学习Laravel,仍然在学习曲线上。现在我开始使用Laravel 3,但是一旦我找到工作,最有可能将我的项目切换到Laravel 4。 现在的问题是,如何验证复选框数组,我想验证组中至少有1个是启用(选中)。我在Laravel论坛上读过一段,我们只是使用必要的验证它们,但是当我dd(input::all())我没有看到其他东西,但输入字段和复选框不是其中的一部分...Laravel 3 - 如何验证复选框数组,至少检查1个?

我的刀片的一部分创建代码对于复选框:

<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中的验证大致相同,是吗?

回答

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> 

叶片视图的说明是一个2步处理,验证之后发生,如下:

  1. 拉出复选框阵列(在我的情况'changeReasons []')与Input::old
  2. 从该数组中,我们可以搜索个别复选框,看看他们是否在那里,如果他们然后改变支票框作为checked状态。这是in_array()函数的工作,返回true/false会改变复选框的状态。

我的控制器(REST)代码与我在开头提到的问题完全一样。有关更多信息,定义$rules = array('changeReasons' => 'required');将确保至少有一个复选框是checked

0

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

我使用这个代码:

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

或者你可以像使用Input :: get('foo',0);' – 2013-05-02 06:39:40

+2

那样使用默认的回退,但是我怎样才能让我的'Validator'检查并通过'return Redirect: :back_() - > with_input() - > with_errors($ validation);'我希望它成为我的验证的一部分,而不是作为额外的输入,如果可能的话我不能在同一时间返回 – ghiscoding 2013-05-02 13:27:24

+0

我想我我开始明白你为什么要这样使用它,现在你写的代码可以用于单个复选框名称,但在我的情况下,我使用复选框数组,所以如何检索我的复选框的代码1生活检查?我尝试了一些类似于'Input :: get('changeReasons [ckbCRCertification]',0)'的方法,但是这样做不起作用,因为'get'只能用单键而不用数组。那么如何知道我的复选框是否启用呢? – ghiscoding 2013-05-02 22:23:09

相关问题