假设我有一个包含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(不需要进行任何验证或传入我的控制器)。
基本上,这是做什么的理想方式?
答案 0 :(得分:1)
如果您不想关注数据是通过$_GET
还是$_POST
,send
可以获取一系列数据,您可以放置$_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)
您的控制器应该处理任何用户输入的第一级清理。这样,如果数据不正确或恶意,您的控制器可以连接正确的错误视图并将其呈现给用户。
通常(我知道纯粹主义者会不同意我的观点......),但通常当数据到达模型时,模型应该假设数据已经过清理,并且只是担心其在业务逻辑方面的有效性。因此,一旦您的控制器清理并将数据发送到模型,只有当模型违反某些业务规则时,数据才会对模型无效。