如何在构建日历时分离逻辑和表示代码


How can I separate logic and presentation code when building a calendar?

好的,我们有一个页面。非常简单。我们叫它page.php。它将有一个控制器和一个视图。控制器将捕获一些GET变量并在该页的开头打印出来,视图将显示一个页眉,一个页脚和一个段落,其中将包含来自控制器的GET变量。

现在假设我们想要添加一个日历。你认为这很好很容易。嗯,在我看来一点也不重要。

日历由纯HTML的<table><tbody>X</tbody></table>和逻辑PHP脚本(将填充X)组成,该脚本将创建(基于当前日期和时间的time()戳)月份日期和数字。

现在我遇到了一个伦理问题:我如何区分逻辑和日历的观点?

创建日期的代码块将打印<td><tr>,详细说明time()。但是如果逻辑打印HTML不是很糟糕吗?我认为是这样的,因为你轻松地想到了所谓的"逻辑和视图的划分"这是典型的MVC模式。

同时,如果我们把所有的日历逻辑带到控制器,我们只是发送给视图和日期数组(用坐标X和Y告诉他把这个月的第一个日期放在哪里),视图仍然需要精心设计数组,也将成为逻辑。

我怎么能把这个日历的逻辑和观点分开呢?

在视图中简单地迭代数组是完全没有问题的,并且没有违反MVC模式。逻辑发生在您填充数组的控制器中。更好的方法可能是将逻辑放入名为Calendar.php的模型中,并在控制器中对其进行初始化,以便将其传递给视图。

你可以把逻辑代码放在PHP文件中,并将结果赋值给将显示在视图文件中的变量(例如数组)

在视图文件中,您可以轻松地回显变量并放置HTML标记。