2011-12-09 79 views
4

说我想检索并显示给定输入的用户日期列表。 Controller接收输入,查询Model的日期(从DB以Unix时间戳格式返回),然后将日期传递给View以供显示。在MVC设置中,应该在哪里格式化文本?

我的问题是:在这个链中我应该将日期重新格式化为人类可读的东西?即“1323473367”重新格式化为“2011年12月9日”。

一方面,我认为在模型中做到这一点是合理的,尽可能保持控制器'尽可能轻',并保持视图尽可能纯粹为模板。另一方面,日期格式是一种演示细节...所以它可能属于视图。或者它可能属于Controller,因为它不是Model或View的一部分。

回答

0

这是一种哲学问题。我可能会把它放在一个视图中,因为日期格式化可能会因设计而异。但真的,这是你的呼唤。

1

您可以添加一个工具类来格式化日期。因此,在将值传递给视图(从模型拉出之后)之前,您可以根据需要格式化时间戳,但仍然保持集中化,模块化的功能。

0

优秀的概念问题。

理想情况下,这应该在视图中完成。在我的应用程序中,我使用JavaScript来生成一个界面。用户与界面进行交互,界面将这些交互映射到Ajax请求上。服务器返回时间戳(而不是格式化的日期),接口将这些时间戳映射到格式化的时间字符串上。该模型只能“理解”时间戳,并对人类对时间的理解漠不关心。控制器不“理解”任何东西。

但是,CodeIgniter不能这样工作。相反,控制器向模型请求信息,使用视图呈现该信息并将视图返回给客户端。该视图只是用于呈现信息的模板。它不能像JavaScript那样将信息翻译成另一种形式。

重要原则:控制器必须对业务逻辑漠不关心。时间的含义是业务逻辑的一部分。因此,控制器不应该“理解”什么时间戳“意味着什么”,这对控制器将时间戳转换为人类可读的字符串是必需的。这留下了观点和模型。

如上所述,视图不“理解”信息;它只在其周围放置HTML标签。

剩下的就是模型。当客户端请求一个资源时,它应该告诉服务器它的语言环境。控制器应该将语言环境传递给模型,模型应该“理解”语言环境并相应地设置时间字符串的格式。

相关问题