【问题标题】:How to prevent code duplication for CodeIgniter form validation?如何防止 CodeIgniter 表单验证的代码重复?
【发布时间】:2012-03-26 01:50:20
【问题描述】:

这是该问题的工作人员控制器中的函数示例

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
    }

}

如果表单验证返回 false,我需要从函数 add_newStaff() 加载回数据库中的所有数据。这可能很麻烦,因为我需要维护两份代码。我可以使用任何提示来防止这种情况发生吗?

谢谢。

【问题讨论】:

    标签: codeigniter validation dry


    【解决方案1】:

    是什么阻止您执行以下操作

      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;
        }
    

    【讨论】:

      【解决方案2】:

      或者,您可以更改表单提交的操作,使其指向您用于初始表单请求的相同服务,如下所示。这也意味着如果您想在表单中保留任何已提交的值,您将在页面加载之间保留 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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-03
        • 2018-11-03
        • 2019-06-18
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        相关资源
        最近更新 更多