代码何时停止在MVC模式中分离?

时间:2016-08-05 15:20:45

标签: php model-view-controller model controller

这个问题有点理论化。我正在使用PHP和MVC模式构建Web应用程序。我的问题是:我应该在哪里停止分离视图和控制器?

让我用一个例子说明这个问题:

假设我想构建一个显示未读邮件数量的系统, ,如果有 。我将有3个文件:视图,控制器和模型(为了简单起见,我们称之为view.phpcontroller.phpmodel.php。)

  • model.php将从数据库中获取未读消息的数量。
  • controller.php会询问并收集相关信息。
  • view.php会将此号码显示给用户。

但是如果没有未读消息,我不想显示数字0.那么我应该在哪个文件中添加一个条件来验证是否应该显示该数字?有两种可能性:

  • view.php中,添加以下条件:

_

if ($unread_messages > 0) {
    echo "<p>There are $unread_messages unread messages</p>";
}
  • controller.php中,添加以下功能:

_

public function countUnread() {
    ... // Got the data from the model 
    if ($unread_messages > 0) {  
        return "<p>There are $unread_messages unread messages</p>";  
    }  
}

第一个问题是view.php只是为了显示信息,除了检索信息外,不应该有任何PHP代码。

第二个问题是控制器应该只获取信息,它不应该存储任何句子或短语:这是视图的工作。

在这种情况下我该怎么办?你认为哪种解决方案适合这个问题?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

第一个问题是view.php仅用于显示信息,除了检索信息外,不应该是任何PHP代码。

我不相信这是正确的。将逻辑放在View中与应该显示的内容直接相关时没有任何问题。根据您的示例:

if ($unread_messages > 0) {
    echo "<p>There are $unread_messages unread messages</p>";
} else {
    echo "<p>You have <a href=\"#\">$unread_messages unread messages</a></p>";
}

这在视图中是完全可以接受的,因为您正在根据从模型和/或控制器收到的信息确定要显示的内容。甚至模板引擎都使用这样的基本控制结构。

修改

以下是使用Laravel的similar example

<?php $count = Auth::user()->newThreadsCount(); ?>
@if($count > 0)
<span class="label label-danger">{!! $count !!}</span>
@endif