7

こんにちは私はこのような多次元フォームを検証する必要があります

<input type="text" class="input-xlarge span5 req" id="contact_first_name" name="hotel[<?=$id?>][contact_first_name]" value="<?= set_value('hotel[contact_first_name]') ?>">
<input type="text" class="input-xlarge span5 req" id="contact_last_name" name="hotel[<?=$id?>][contact_last_name]" value="<?= set_value('hotel[contact_last_name]') ?>">

入力はjqueryを介して動的に追加されるため、最終的な配列の次元はわかりません。

サーバー側にはCodeigniterForm_Validationを使用し、クライアント側にはJQueryValidatorを使用してJQueryを使用しています。

これは私のform_validationルールです

$config['add_hotel'] = array(
array(
    'field' => 'hotel[][hotel_name]', 
    'label' => 'Hotel Name', 
    'rules' => 'required'
    ),    
array(
    'field' => 'hotel[][contact_first_name]', 
    'label' => 'First Name', 
    'rules' => 'trim|required'
    ),
array(
    'field' => 'hotel[][contact_last_name]', 
    'label' => 'Last Name', 
    'rules' => 'trim|required'
    ),

これがjqueryバリデーターを介して行っている方法です

$("#add_hotel").validate({
rules: {
    "hotel[][hotel_name]": "required"

  /*  errorElement: "div",
    wrapper: "div"*/
},
messages: {
   "hotel[][hotel_name]": "Please enter the Association Name"
},
submitHandler: function(form) {
    form.submit();
}

Hotel[]各入力を独自のIDで検証する方法がわからない、または入力をより簡単に定義する別の方法があるかもしれません。

4

3 に答える 3

11

投稿された配列

$hotel = $this->input->post('hotel');
if(!empty($hotel))
{
    // Loop through hotels and add the validation
    foreach($hotel as $id => $data)
    {
        $this->form_validation->set_rules('hotel[' . $id . '][contact_first_name]', 'First name', 'required|trim');
        $this->form_validation->set_rules('hotel[' . $id . '][contact_last_name]', 'Last name', 'required|trim');
    }
}

常に適用されるデフォルトのルール

$this->form_validation->set_rules('username', 'Username', 'required');

if ($this->form_validation->run() == FALSE)
{
    // Errors
}
else
{
    // Success
}
于 2012-09-17T21:03:41.907 に答える
0

Codeigniter には、配列として名前が付けられた入力の検証ルールを処理する非常に厳密な方法があります。フィールド名がまったく同じ場合にのみ検証するため、ルールは

array(
    'field' => 'hotel[][hotel_name]', 
    'label' => 'Hotel Name', 
    'rules' => 'required'
    ),    

フィールドが実際に hotel[][hotel_name] という名前の場合にのみ機能します。
これはフィールドの名前ではないため (実際の名前は hotel[1][hotel_name] のようなものです)、Codeigniter によって検証されません。

構成配列を動的に生成できますが、これらのフィールドに対して独自の検証ルールを個別に作成する方がよいと思います。

于 2012-09-17T20:11:19.343 に答える