Как предотвратить дублирование кода для проверки формы CodeIgniter? - PullRequest
0 голосов
/ 26 марта 2012

Это пример функции в контроллере персонала для этого вопроса

function newStaff()
{
    $data = array();

    $data['departmentList'] = $this->department_model->list_department();
    $data['branchList'] = $this->branch_model->list_branch();
    $data['companyList'] = $this->company_model->list_company();

    $this->load->view('staff/newstaff', $data);

}

function add_newStaff()
{
    //when user submit the form, it will call this function
    //if form validation false

    if ($this->validation->run() == FALSE)
    {
        $data = array();

        $data['departmentList'] = $this->department_model->list_department();
        $data['branchList'] = $this->branch_model->list_branch();
        $data['companyList'] = $this->company_model->list_company();

        $this->load->view('staff/newstaff', $data);
    }
    else
    {
        //submit data into DB
    }

}

Из функции add_newStaff () мне нужно загрузить все данные из базы данных, если проверка формы вернула false.Это может быть хлопотно, так как мне нужно сохранить две копии кодов.Любые советы, которые я могу использовать, чтобы предотвратить это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Альтернативно вы изменяете действие, которое отправляет ваша форма, чтобы оно указывало на ту же службу, которую вы используете для первоначального запроса формы, примерно следующим образом.Это также будет означать, что значения POST будут сохраняться между загрузками страниц, если вы хотите сохранить любое из представленных значений в вашей форме.

function newStaff()
{
    // validation rules

    if ($this->validation->run() == TRUE)
    {
        //submit data into DB
    }
    else
    {
         $data = array();
         $data['departmentList'] = $this->department_model->list_department();
         $data['branchList'] = $this->branch_model->list_branch();
         $data['companyList'] = $this->company_model->list_company();

         $this->load->view('staff/newstaff', $data);
    }
}
1 голос
/ 26 марта 2012

Что мешает вам сделать следующее

  function newStaff()
    {
        $data = $this->_getData();

        $this->load->view('staff/newstaff', $data);

    }

    function add_newStaff()
    {
        //when user submit the form, it will call this function
        //if form validation false

        if ($this->validation->run() == FALSE)
        {
            $data = $this->_getData();

            $this->load->view('staff/newstaff', $data);
        }
        else
        {
            //submit data into DB
        }

    }

    private function _getData()
    {
        $data = array();

        $data['departmentList'] = $this->department_model->list_department();
        $data['branchList'] = $this->branch_model->list_branch();
        $data['companyList'] = $this->company_model->list_company();

        return $data;
    }
...