【问题标题】:What is the best practice for creating method functions in PHP MVC?在 PHP MVC 中创建方法函数的最佳实践是什么?
【发布时间】:2011-07-12 11:42:26
【问题描述】:

我想知道将信息从控制器传递到模型时被认为是最佳实践。更具体地说,我正在一个用户类中创建一个用户注册模型,该模型要求提供某些信息,例如电子邮件、姓名和密码。

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

这是我所指的两个例子。

方法一

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

方法二

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

我已经删除了很多验证代码以及不简化问题的内容,希望您能理解。

【问题讨论】:

    标签: php model-view-controller


    【解决方案1】:

    您不应该从您的模型中访问您的 POST 变量。这将使您的模型的可重用性降低,因为现在它们依赖于 POST 数据来工作。例如,在其他时候,如果您需要一种方法来做同样的事情,但您从其他来源 (CSV) 获取数据,您将无法使用相同的模型,因为您已将其与发布。

    在使用这样的结构时尝试将它们解耦

    【讨论】:

      【解决方案2】:

      我不会在模型层使用$_POST(也不会与您的框架等效):这个不必知道数据来自哪里。

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

      控制器是被调用的,接收HTTP请求的参数(当然是HTTP请求的情况下);然后它将提取数据,并将其传递给将处理此数据的层:模型。

      【讨论】:

        猜你喜欢
        • 2020-01-11
        • 2015-08-28
        • 1970-01-01
        • 2015-07-27
        • 2010-09-12
        • 2021-06-19
        • 2019-01-08
        • 2013-05-17
        • 2010-09-15
        相关资源
        最近更新 更多