在PHP MVC中创建方法函数的最佳实践是什么?

时间:2011-03-10 06:18:35

标签: php model-view-controller

我想知道从控制器传递信息到模型时最佳做法是什么。更具体地说,我在用户类中创建一个用户注册模型,要求提供某些信息,如电子邮件,名称和密码。

我想知道在模型函数中放置参数并以这种方式传递它们是否更好,或者更好的方法是调用函数并使用$ _POST变量进行查询。

以下是我所指的两个例子。

方法1

function register(){

    $first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $email = $this->input->post('email');
    $password = $this->input->post('password_1');

    $this->user_model->register_user($email, $password, $first_name, $last_name));}

function register_user($email, $password, $first_name, $last_name){
    $sql = "INSERT INTO users (user_id, email, passwd, first_name, last_name, registration_date, confirmed, confirmation_code, banned)VALUES (NULL, ?, ?, ?, ?, '".date('Y-m-d')."', 'no', '1fg455675', 'no')";
    $register = $this->db->query($sql, array($email, $password, $first_name, $last_name));
    return $register;
}

方法2

function register(){
    $this->user_model->register_user());    
}

function register_user(){

    $first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $email = $this->input->post('email');
    $password = $this->input->post('password_1');


    $sql = "INSERT INTO users (user_id, email, passwd, first_name, last_name, registration_date, confirmed, confirmation_code, banned)VALUES (NULL, ?, ?, ?, ?, '".date('Y-m-d')."', 'no', '1fg455675', 'no')";
    $register = $this->db->query($sql, array($email, $password, $first_name, $last_name));
    return $register;
}

我已经删除了很多验证代码以及什么不能简化问题,所以希望你能得到这个想法。

2 个答案:

答案 0 :(得分:2)

您不应该从模型中访问POST变量。这将使您的模型不再可重用,因为现在它们依赖于POST数据来工作。例如,在某些其他方面,如果您需要一种方法来执行相同的操作,但是您从其他来源(CSV)获取数据,那么您将无法使用相同的模型,因为您已将其与POST。

在使用这样的结构时尝试将它们分离

答案 1 :(得分:2)

我不会在Model层中使用$_POST (也不等同于你的框架):这个不必知道数据的来源。

可以从Web服务,命令行程序或其他任何方式调用模型,并且必须仍然可以工作:它不能依赖于发布到应用程序的任何内容。

Controller是被调用的,接收HTTP Request 的参数(当然是HTTP请求的情况下);然后它将提取数据,并将其传递给将对此数据起作用的层:模型。