2014-10-03 98 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