这个问题有点理论化。我正在使用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代码。
第二个问题是控制器应该只获取信息,它不应该存储任何句子或短语:这是视图的工作。
在这种情况下我该怎么办?你认为哪种解决方案适合这个问题?
谢谢。
答案 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