2011-08-22 35 views
0

我試圖濃縮我的控制器一點,主要是由於URI美學。現在我的控制器工作,但如果有一個錯誤,我留下了控制器/進程,我不想在那裏,我寧願它是CodeIgniter - 表單處理速度很慢,並且不會返回錯誤的值

所以我試圖用

public function add() 
{ 
    if ($this->input->server('REQUEST_METHOD') === 'POST') 
    { 
     if ($this->form_validation->run('add') === FALSE) 
     { 
      $this->add(); // reload the method/form for errors. 
     } 
     else 
     { 
      $this->_process(); // private function for inserting the data. 
     } 
    } 
    else 
    { 
    $this->load->view('add_form') 
    } 
} 

會發生什麼事是形式需要一個可怕的很長一段時間來重建我的控制器(只有像5秒,但是這仍然令人作嘔的可怕),然後重新加載形式,但沒有任何錯誤顯示並且表單不重新填充。

我感覺這是一個超級簡單的問題,這是純粹的用戶錯誤,但我不能挑出我到底做錯了什麼,這使得這個過程如此挑剔。

回答

1

當表單加載失敗時,您再次調用方法add(),這可能會導致它自行循環。我的代碼重構是這樣的:

public function add() 
{ 
    if ($this->form_validation->run('add')) 
    { 
     $this->_process(); // private function for inserting the data. 
     redirect('controller_name/method_name'); 
    } 

    $this->load->view('add_form') 
} 

通知我刪除了檢查,看是否有發送,因爲如果沒有$_POST變種,以檢查它,形式不驗證POST。另外,我在redirect()中發送用戶到不同的方法,或者甚至重新加載相同的方法,但它會清除$_POST並停止執行其餘的方法。

+0

循環問題是有道理的,但如果我使用redirect(),那麼驗證會丟失(字段的重新填充)。這是一個包含大約25個字段的表單,如果用戶因爲沒有填寫整個表單而必須重新整理整個表單,我肯定會有相當的PO'd。你說的話是有道理的,我會看到我可以在這方面與之合作。我只是想到$ this-> add()會簡單地重新加載方法。可能不會。謝謝。 – Sebhael

+0

我誤解了你剛纔所說的話,然後再掠過它並理解它。謝謝。 – Sebhael

+0

沒問題。很高興我能幫上忙! –