数据应该传递给MVC模型中的函数吗?

时间:2014-01-30 23:21:22

标签: php model-view-controller

假设我有一个包含3个字段的HTML联系表单。提交时,表单会在我的联系人控制器中触发contact()

在联系人控制器中:

function contact() {

    // Check if form was submitted
    if (isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message'])) {

        $response = $this->contact_model->send($_POST['name'], $_POST['email'], $_POST['message']);

        if ($response === 1) {
            // Redirect or something
        }
    }

    // Load contact view
}

在Contact_model中:

function send($name, $email, $message) {

    // Validate form data

    // Save or send (whatever)

    // If no errors, return 1
}

我想知道的是,如果我做得对吗?由于我的模型不应该关心数据是通过$ _GET还是$ _POST还是别的,我想我最好把它传入。这要求我首先检查是否发送了所需的post变量(使用isset() ),然后传递所有内容。它变得有点混乱,而不是在我的模型中使用$ _POST(不需要进行任何验证或传入我的控制器)。

基本上,这是做什么的理想方式?

2 个答案:

答案 0 :(得分:1)

如果您不想关注数据是通过$_GET还是$_POSTsend可以获取一系列数据,您可以放置​​$_GET$_POST。然后,您可以在send中验证您的数据:

联络管理员:

<?php
function contact() {
    $response = $this->contact_model->send($_POST);

    if ($response === 1) {
        // Redirect or something
    }

    // Load contact view
}
?>

联系模式:

<?php
function send($data) {
    // Validate form data

    // Save or send (whatever)

    // If no errors, return 1
}
?>

答案 1 :(得分:1)

您的控制器应该处理任何用户输入的第一级清理。这样,如果数据不正确或恶意,您的控制器可以连接正确的错误视图并将其呈现给用户。

通常(我知道纯粹主义者会不同意我的观点......),但通常当数据到达模型时,模型应该假设数据已经过清理,并且只是担心其在业务逻辑方面的有效性。因此,一旦您的控制器清理并将数据发送到模型,只有当模型违反某些业务规则时,数据才会对模型无效。