代码应该在什么时候停止在MVC模式中分离



这个问题有点理论性。我正在使用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代码。

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


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

谢谢。

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

我认为这是不对的。当逻辑与应该显示的内容直接相关时,将其放在视图中并没有错。基于您的示例:

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的类似示例:

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

最新更新