假设我想检索并向用户显示给定输入的日期列表。 Controller获取输入,在Model中查询日期(从数据库以Unix时间戳格式返回),然后将日期传递给View进行显示。
我的问题是:在这个链中我应该将日期重新格式化为人类可读的东西吗?即“1323473367”重新格式化为“2011年12月9日”。
一方面,我在模型中进行操作是有意义的,以使Controller尽可能“轻”,并尽可能将View视为纯模板。另一方面,日期格式是一种演示细节......所以它可能属于视图。或者它可能属于Controller,因为它不是模型或视图的一部分。
答案 0 :(得分:1)
您可以添加实用程序类来格式化日期。因此,在将值传递给视图之前(从模型中提取后),您可以根据需要格式化时间戳,同时保持功能集中,模块化。
答案 1 :(得分:0)
这是一个哲学问题。我可能会把它放在一个视图中,因为日期格式化可能因设计而异。但这是你的号召,真的。
答案 2 :(得分:0)
优秀的概念性问题。
理想情况下,这应该在视图中完成。在我的应用程序中,我使用JavaScript生成一个接口。用户与接口交互,接口将这些交互映射到Ajax请求。服务器返回时间戳(而不是格式化日期),接口将这些时间戳映射到格式化的时间字符串。该模型只“理解”时间戳,并且对人类如何理解时间感到无动于衷。控制器不“理解”任何东西。
但是,CodeIgniter不会那样工作。相反,控制器从模型请求信息,使用视图呈现该信息,并将视图返回给客户端。视图只是呈现信息的模板。它不能像JavaScript那样将信息转换为另一种形式。
重要原则:控制器必须对业务逻辑无动于衷。时间的含义是业务逻辑的一部分。因此,控制器不应“理解”时间戳“的意思”,这是控制器将时间戳转换为人类可读字符串所必需的。这留下了视图和模型。
如上所述,该观点不“理解”信息;它只在它周围放置HTML标签。
剩下的只是模型。当客户端请求资源时,它应该告诉服务器它的语言环境。控制器应该将语言环境传递给模型,模型应该“理解”语言环境并相应地格式化时间字符串。