codeigniter中的胖模型和瘦控制器

时间:2015-02-22 18:23:17

标签: mysql codeigniter model-view-controller

这是一个user.php控制器

public function verifyLogin() {
    if (isset($_POST["email"])) {
        $e = $this->input->post("email");
        $p = $this->input->post("pass");

        $this->form_validation->set_rules("email", "email", "required|valid_email|xss_clean");
        $this->form_validation->set_rules("pass", "password", "required|xss_clean");

        if ($this->form_validation->run()) {
            $data = array(
                'select' => '*',
                'table' => 'users',
                'where' => "email = '$e' AND activated = '1'"
            );
            $checklogin = $this->query2->selectData($data);
            if ($checklogin === FALSE) {
                echo "quering userInfo fails. email is wrong or activation not done";
                exit();
            } else {
                foreach ($checklogin as $row) {
                    $dbid = $row->id;
                    $dbusername = $row->username;
                    $dbpassword = $row->password;
                    $dbemail = $row->email;
                    if ($p === $dbpassword) {
                        $login_data = array(
                            'name' => $dbusername,
                            'email' => $dbemail,
                            'password' => $dbpassword,
                            'id' => $dbid,
                            'expire' => '86500',
                            'secure' => TRUE,
                            'logged_in' => TRUE
                        );
                        $this->input->set_cookie($login_data);
                        $this->session->set_userdata($login_data);
                        if ($this->session->userdata("logged_in")) {
                            $time = time();
                            $now = unix_to_human($time, TRUE, 'us');
                            $updateLogin = $this->query1->updateLogin($e, $now);
                            if ($updateLogin) {
                                echo "success";
                            } else {
                                echo 'update failed';
                            }
                        } else {
                            echo "session failed";
                        }
                    }else{
                        echo 'password incorrect';
                    }
                }
            }
        } else {
            echo "form validation fails";
        }
    } else {
        $this->load->view('header');
        $this->load->view('login');
        $this->load->view('modal');
        $this->load->view('footer');
    }
}

这是model.php

public function selectData($data){

    if(isset($data['direction'])){
        $dir = $data['direction'];
    }else{
        $dir = "ASC";
    }

    if(isset($data['offset'])){
        $off = $data['offset'];
    }else{
        $off = '0';
    }

    if(isset($data['select']) && isset($data['table'])){
        $this->db->select($data['select'])->from($data['table']);
    }

    if(isset($data['where'])){
        $this->db->where($data['where']);
    }
    if(isset($data['order_by_name'])){
        $this->db->order_by($data['order_by_name'], $dir);
    }
    if(isset($data['limit'])){
        $this->db->limit($data['limit'], $off);
    }

    $query = $this->db->get();

    if($query){
        $d = $query->result();
        return $d;
    }else{
        return FALSE;
    }

}

这是查询数据库的好方法吗? 我是mvc的新手,我到处都在阅读"胖模特和这个控制器" 有什么办法可以使它成为一个很好的mvc架构?

1 个答案:

答案 0 :(得分:0)

只有在您开发时才能接受来自控制器的回声:

 if ($checklogin === FALSE) {
                echo "quering userInfo fails.

如果检查登录名为false,则显示视图或转到

之类的新方法
 if ($checklogin === FALSE) { 

      $this->showLoginFailed($errorMessage) ; 

控制器中的检查登录代码是可以重构为模型的一个很好的例子。然后,如果你需要检查从另一个控制器登录它更容易。将表单验证代码放入模型中将是另一种选择。通常,当您验证表单代码时,您也会插入/更新到数据库表 - 因此在模型中将所有这些详细信息放在一起可以使事情更容易长期。

“胖模型”并不意味着模型中的一种方法可以完成一百件事。这意味着控制器说 - 这个客户表单是否验证并插入数据库?是还是不是? 3行代码。

该模型的代码正在查看表单,验证,数据库等的“胖”细节等。比较控制器中的3行表示50行或更多行。但模型中的方法应该仍然是干净的:小而具体。