错误时对点火器进行代码验证


Code Igniter Validation on Error

我很清楚如何对点火器/OOP进行编码,但我尝试了一下,在这一点上有点困惑。

我有两个功能。一种是从模型加载数据的搜索。另一个是保存功能。

我的问题是,当运行save()时,我会遇到错误,因为它试图显示验证错误,但我们不再拥有从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);
        }   
    }

我不确定我是否完全理解你的问题,但我想我理解你想做什么。在CodeIgniter中,你可以做这样的事情:

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语法。