这个问题有点理论性。我正在使用PHP和MVC模式构建一个web应用程序。我的问题是:我应该在哪里停止分离视图和控制器?
让我用一个例子来说明这个问题:
比方说,我想构建一个显示未读消息数量的系统,(如果有(。我将有3个文件:一个视图、一个控制器和一个模型(为了简单起见,我们称它们为view.php
、controller.php
和model.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