4

私は Laravel を学び始めていますが、まだ学習曲線上にあります。現在、私は Laravel 3 から始めていますが、何かが機能するようになったら、おそらくプロジェクトを Laravel 4 に切り替えます。問題は、チェックボックスの配列を検証する方法です。グループ内の少なくとも 1 つが有効 (チェック済み) であることを検証したいと思います。Laravelフォーラムのどこかで、必須を使用してそれらを検証するだけだと読みましたdd(input::all())が、他に何も表示されない場合、入力フィールドとチェックボックスはそれらの一部ではありません...

チェックボックスの私のBlade Createコードの一部:

<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でもほぼ同じだと思いますか?

4

2 に答える 2

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');により、チェックボックスの少なくとも 1 つが であることが確認されますchecked

于 2013-05-13T20:28:50.943 に答える