这段代码应该放在MVC结构中的哪个位置?

时间:2011-07-06 15:03:04

标签: php model-view-controller model controller modeling

我正在阅读很多内容并且得到了非常好的结果。

说我有这样的代码吗?

$name = trim($_POST['name']);
$email = trim($_POST['email']);

if(strlen($name) > 0 & strlen($email) > 0)
{
   $u = new User();
   $u.name = $name;
   $u.email = $email;
   $u.validate();
}

此代码应该在哪里生效?实际检查表单以确保它具有实际值的代码?我说模型,但是如果你的表单跨越多个模型会怎么样?

我有点困惑,任何帮助清除它都会受到赞赏。

5 个答案:

答案 0 :(得分:3)

理想情况下,完全分离关注点:

Controller应收集$_POST数组并将其传递给Model

然后model会进行修剪和验证等处理。

我会说+1模型包含业务逻辑。

答案 1 :(得分:2)

模型层中的检查应该保证数据库的完整性。所有这些检查都应该存在于你的u.validate()方法中。

您可以另外将检查添加到控制器层作为优化或驱动某些视图操作。

我会以这种方式重构。

控制器代码

   $u = new User();
   $u.name = $_POST['name'];
   $u.email = $_POST['email'];
   if ($u.validate() && $u.save()) {
       // success code
   } else {
       // fail 
   }

模型代码

class user {
...
function validate() {
   if (empty($this->name) || strlen($this->name) < 1)  return false;
   if (empty($this->name) || strlen($this-email) < 1)  return false;
}
...

答案 2 :(得分:1)

将其放入model部分,因为模型包含业务逻辑..

<强> Reference

答案 3 :(得分:1)

这是一篇很好的文章,远远解释了PHP中的MVC Oreilly上面的答案是正确的,但是为了让你真正使用MVC对每个部分为什么会去的地方有一定的了解,希望这篇文章能够推动你朝着正确的方向发展。

答案 4 :(得分:0)

如果您在保存之前验证数据(例如电子邮件,姓名),那么我投票给模型。

您的MVC框架应该能够验证每个模型的数据。

最后,MVC是一种架构。没有确定的模式。所以这取决于你。很多时候一致性都会胜出。也就是说,如果你想把它放在控制器而不是模型中,那就在你的代码中做。