2011-07-06 28 views
1

我在读很多东西,得到的结果非常混杂。这段代码应该在MVC结构中生存?

说我有这样的代码?

$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(); 
} 

此代码应该在哪里存在?实际检查表单以确保其具有实际值的代码?我说Model,但是如果你的表单跨越多个模型呢?

我有点困惑,任何帮助清除它将不胜感激。

+0

参见:http://stackoverflow.com/questions/6524037/designing-service-layer-classes-in-php –

回答

3

在理想情况下为关注完全分离:

Controller应当收集$_POST阵列和它传递给Model

然后,model将执行修剪和验证等处理。

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

1

将这个变成model部分,因为模型包含业务逻辑..

Reference

+3

与模型同意,但不包括*模型包含业务逻辑*。 –

+0

甚至表单验证部分?这只是检查以确保表单具有值?那么你可以将$ _POST数组传递给模型? – Dietpixel

0

如果您要验证保存(如电子邮件,姓名)之前的数据,然后我投模型。

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

最后,MVC是一种架构。没有确定的模式。所以这取决于你。很多时间一致性胜出。也就是说,如果您想将其放入控制器而不是模型中,请在整个代码中执行此操作。

1

这是一个伟大的文章,远远内PHP解释MVC Oreilly答案以上是正确的,但为了让您真正使用MVC了一定的理解,为什么每个部分去哪里就有奇迹是希望这需要文章会把你推向正确的方向。

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; 
} 
... 
+0

感谢这个例子。 – Dietpixel

相关问题