Как добавить и отредактировать тем же методом в контроллере codeigniter

#forms #codeigniter #validation #retain

#формы #codeigniter #проверка #сохранить

Вопрос:

Я новичок в codeigniter и пытаюсь добавить и отредактировать категорию с помощью того же метода add.

Вот мой метод добавления:

 public function add($category_id = FALSE)
{
    $this->load->helper('form');
    $this->load->library('form_validation');

    if($category_id === FALSE)
    {
        $this->data['mode'] = 'insert';
        $this->data['hidden_fields'] = array('mode' => $this->data['mode']);
    }
    else 
    {
        $this->data['mode'] = 'update';
        $this->data['category_details'] = $this->category_model->get_category_details($category_id);
        $this->data['category_id'] = isset($this->data['category_details'][0]['category_id']) ? $this->data['category_details'][0]['category_id'] : '';
        $this->data['hidden_fields'] = array('category_id' => $this->data['category_id'], 'mode' => $this->data['mode']);
    }

    // Fill the form data for edit.

    $this->data['name'] = isset($this->data['category_details'][0]['name']) ? $this->data['category_details'][0]['name'] : set_value('name');

    $this->data['description'] = isset($this->data['exam_category_details'][0]['description']) ? $this->data['category_details'][0]['description'] : set_value('description');

    $this->data['status_y'] = (isset($this->data['category_details'][0]['status']) amp;amp; $this->data['category_details'][0]['status'] === 'Y') ? 'checked="checked"' : set_radio('status', 'Y', TRUE);

    $this->data['status_n'] = (isset($this->data['category_details'][0]['status']) amp;amp; $this->data['category_details'][0]['status'] === 'N') ? 'checked="checked"' : set_radio('status', 'Y');

    // set the validation rules
    $validation_rules = array(
           array(
                 'field'   => 'name',
                 'label'   => 'Name',
                 'rules'   => 'trim|required|min_length[5]|max_length[20]|xss_clean'
              ),   
           array(
                 'field'   => 'description',
                 'label'   => 'Description',
                 'rules'   => 'trim|min_length[5]|max_length[256]|xss_clean'
              )
        );

    $this->form_validation->set_rules($validation_rules); 
    // check if validation fails or upload logo fails
    if ($this->form_validation->run() === FALSE)
    {
        $this->data['validation_errors'] =  validation_errors();
        $this->load->view($this->config->item('templates_path').'header', $this->data);
        $this->load->view($this->config->item('templates_path').'sidebar_content', $this->data);
        $this->load->view($this->config->item('templates_path').'navigation', $this->data);
        $this->load->view('add_category', $this->data);
        $this->load->view($this->config->item('templates_path').'footer');
    }
    else
    {
        $id = $this->category_model->update_category();
        if($id !== FALSE amp;amp; is_numeric($id))
        {               
            $this->session->set_flashdata('msg_success', 'Operation Successful');
            redirect('/exams/exam_category/');

        }
        else
        {
            // update exam category failed some where
            log_message('error', 'Update exam category failed', TRUE);
            show_error("Unable to Update exam category : ".$id);
        }
    }
}
  

Вышеуказанный метод отлично работает для добавления и редактирования категории, но если проверка формы завершается неудачей, я теряю значения по умолчанию для формы как в случае добавления, так и в случае редактирования. Я использовал метод set_value codeignitor. Как я могу сохранить входные значения формы в случае сбоя проверки?

Комментарии:

1. почему вы хотите, чтобы это было тем же методом? Это просто создаст беспорядок, а не чистый способ сделать это

2. Я использую тот же метод для повторного использования кода

3. почему бы вам не следовать простой концепции CRUD, создав 4 метода, и ваша работа станет легкой. Не создавайте беспорядок в коде.

4. хорошо, я изменил код на концепцию CRUD, спасибо