Laravel 3 - 如何验证复选框数组,至少选中 1 个?

标签 laravel laravel-3

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

我的 Blade 的一部分为复选框创建代码:

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

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

最佳答案

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

我的 Blade View :

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

Blade View 的解释是一个 2 个步骤的过程,发生验证后,如下:

  1. 使用 Input::old 拉取复选框数组(在我的例子中为“changeReasons[]”)
  2. 然后,我们可以从该数组中搜索单个复选框并查看它们是否在那里,如果存在,则将复选框更改为已选中状态。这就是 in_array() 函数的工作,返回 true/false 将更改复选框的状态。

我的 Controller (REST)代码与我在问题开始时所写的完全相同。有关详细信息,定义 $rules = array('changeReasons' => 'required'); 将确保至少有 1 个复选框被选中

关于Laravel 3 - 如何验证复选框数组,至少选中 1 个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326693/

相关文章:

php - 从有限制的3个表中选择数据

php - Laravel Eloquent - 等同于 first() for last?

Laravel:将数据从基本 Controller 传递到 default.blade.php

php - Laravel 3 和 MYSQL 内存限制

php - PDO异常 : Can't open lib 'ODBC Driver 13 for SQL Server'

php - Laravel Auth::attempt() 返回 false

laravel - 如何使用 Laravel 的 Eloquent/Fluent 将每一行设置为相同的值?

php - 在 Laravel 中使用自动 Controller 路由是个坏主意

php - Laravel - 在 Eloquent 中连接 3 个表

laravel - 在 Laravel 请求中自定义验证消息