2013-06-12 72 views
0

我有一個生成複選框的循環,我在視圖中工作,但我想將它移動到控制器中,然後將結果字符串傳遞給視圖。問題是set_checkbox()似乎沒有記住它被放置在控制器中的值。它似乎確定了默認值。Codeigniter,在控制器中使用set_checkbox

編輯:這只是一個問題,當驗證失敗,我希望複選框保留用戶選擇。否則代碼按預期工作。我也有一個驗證規則集。

$languages_by_name = $this->event_model->get_spoken_languages_by_name(); 

    // Generate array from model data for form_dropdown() 
    $i = 1; 
    $list_languages = ''; 
    foreach ($languages_by_name as $row) { 
     $i == 1 ? $first = TRUE : $first = FALSE; // Check if this is the first radio and precheck it. 
     $list_languages .= '<label>' . form_checkbox('spokenLanguages[]', $row->event_spoken_id, set_checkbox('spokenLanguages', $row->event_spoken_id, $first)) . ' ' . $row->name . '</label> '; 
     $i++; 
    } 
    // Pass $list_languages to view 
    $this->data['list_languages'] = $list_languages; 
+0

'var_dump($ list_languages)''可能會有很大幫助:) – Kyslik

+0

怎麼會這樣? $ list_languages是一堆複選框,第一個複選框按預期方式工作,但在表單提交由於驗證錯誤而失敗時無法記住選中的值。 –

+1

喲需要通過'$ this-> input-> post('spokenLanguages')'將新數據設置爲'$ list_languages',請按照我提出的問題編輯var_dump,還可以發佈整個方法在編輯? (包含驗證)。謝謝 – Kyslik

回答

1

這裏是控制器的工作代碼。可能有更好的方法來做到這一點。

// Generate array from model data for form_dropdown() 
    $i = 1; 
    $list_languages = ''; 
    foreach ($languages_by_name as $row) { 
     // Check if there is post data 
     if(!$this->input->post('spokenLanguages')) { 
      // Set first element to checked 
      $i == 1 ? $selection = TRUE : $selection = FALSE; // Check if this is the first radio and precheck it. 
     } else { 
      // Check if this input is checked 
      if(in_array($row->event_spoken_id, $this->input->post('spokenLanguages'))) { 
       $selection = TRUE; 
      } else { 
       $selection = FALSE; 
      } 
     } 

     $list_languages .= '<label>' . form_checkbox('spokenLanguages[]', $row->event_spoken_id, set_checkbox('spokenLanguages', $row->event_spoken_id, $selection)) . ' ' . $row->name . '</label> '; 
     $i++; 
    } 
    // Pass $list_languages to view 
    $this->data['list_languages'] = $list_languages; 
相關問題