2014-10-03 89 views
0

我很熟悉代碼點火器/ OOP,但我在這一點上給它一個鏡頭,並且有點難住。錯誤代碼點火器驗證

我有2個功能。一個是從模型加載數據的搜索。另一個是保存功能。

我的問題是,當運行save()時,我收到錯誤,因爲它的嘗試ti顯示驗證錯誤,但我們不再擁有從search()函數獲得的數據庫中的數據。

我覺得將搜索的所有細節都包含回這個保存函數是多餘的,這就是爲什麼我認爲我做錯了什麼。

public function search() 
    { 

     // Define some vars 
     $data['title'] = 'Submit Attrition'; 
     $data['js_file'] = 'submit.js'; 

     // Load our helper 
     $this->load->helper('form'); 

     // Get the user and pass it to the model 
     $empQID = $this->input->post('empQID'); 
     $data['userDetails'] = $this->submit_model->get_details($empQID); 
     $data['languages'] = $this->submit_model->get_languages(); 
     $data['types'] = $this->submit_model->get_types(); 
     $data['ratings'] = $this->submit_model->get_ratings(); 
     $data['processes'] = $this->submit_model->get_processes(); 

     // Send the data to the views  
     $this->load->view('templates/header', $data); 
     $this->load->view('submit/search', $data); 
     $this->load->view('templates/footer', $data); 
    } 

    /** 
    * Validate & save attrition submission 
    * 
    * @author Carl 
    * @return void 
    */ 
    public function save() 
    { 
     $data['title'] = 'Submit Attrition'; 
     $this->load->library('form_validation'); 
     $this->form_validation->set_rules('language', 'Supporting Language', 'required'); 

     // Validation failed, show form w/ validation errors 
     if ($this->form_validation->run() === FALSE) 
     { 
      $this->load->view('templates/header', $data); 
      $this->load->view('submit/search', $data); 
      $this->load->view('templates/footer', $data); 
     } 
     else 
     { 
      // Success : Send data to model 
      $this->submit_model->save_attrition(); 
      $this->load->view('templates/header', $data); 
      $this->load->view('submit/success', $data); 
      $this->load->view('templates/footer', $data); 
     } 
    } 
+0

「save」和「search」是否將單獨的動作映射到不同的路由? – 2014-10-03 17:04:35

+0

兩者都在控制器'submit'內。我首先找到用戶,然後通過發佈將用戶ID發送到'submit/search'。然後,表單發佈到'submit/save'。 – SBB 2014-10-03 17:06:45

+0

問題在於,提交/搜索是數據庫調用發生的位置,以生成要填寫的表單。然後,當提交/保存發生並且未通過驗證時,我們不再擁有數據庫中的那些值,因爲它們在其他函數 – SBB 2014-10-03 17:08:10

回答

0

我不知道我完全理解你的問題,但我想我明白你要做什麼。在笨,你做這樣的事情:

class MyController 
{ 

    // this controller action will load whether the form is submitted or not 
    // $user_id is set by the router 
    public function save($username) 
    { 

     // if the users not in the database, throw a 404 error 
     $user = $this->db->get_where('users', ['username' => $username]); 
     if(!$user) { 
      return show_404(); 
     } 

     // if it's not a post request, then the form hasn't been submitted 
     // so don't bother validating it 
     if($router->fetch_method() === 'POST' && $form_validation->run() === TRUE) 
     { 
      $user['name'] = $this->input->post('name'); 
      $this->db->update('users', $user); 
      $this->load->view('success_page'); 

      // return so we don't render the form again 
      return; 
     } 

     // this will happen in all cases, __except__ when the form was submitted 
     // with valid data 
     $this->load->view('form'); 

    } 
} 

我已經跳過細節爲簡潔(如加載相關庫),因爲我不記得所有的CI語法。

+0

中完成嘗試並更好地解釋它是否有幫助。第1步:'index()'加載一個請求用戶名的字段。第2步:將數據發佈到'/ submit/search',該數據載入一個包含所有用戶信息的頁面,讓您編輯它。第3步:一旦你改變了這些數據,它會發布到'submit/save'。但是,當發生驗證錯誤時,我們不再擁有從發佈到另一個函數時從「submit/search」加載的用戶數據。那有意義嗎 ? – SBB 2014-10-03 17:45:54

+0

@SBB是的 - 我在這裏寫的行動將完全處理。您只需要一個動作即可顯示錶單,驗證表單並使用表單中的有效數據更新數據庫。 – 2014-10-03 17:56:07

+0

嗯好吧'if($ router-> fetch_method()==='POST''我認爲這是無效的;試圖找出它。方法返回SAVE,不會發布 – SBB 2014-10-03 18:15:56