2011-12-09 78 views
4

說我想檢索並顯示給定輸入的用戶日期列表。 Controller接收輸入,查詢Model的日期(從DB以Unix時間戳格式返回),然後將日期傳遞給View以供顯示。在MVC設置中,應該在哪裏格式化文本?

我的問題是:在這個鏈中我應該將日期重新格式化爲人類可讀的東西?即「1323473367」重新格式化爲「2011年12月9日」。

一方面,我認爲在模型中做到這一點是合理的,儘可能保持控制器'儘可能輕',並保持視圖儘可能純粹爲模板。另一方面,日期格式是一種演示細節...所以它可能屬於視圖。或者它可能屬於Controller,因爲它不是Model或View的一部分。

回答

0

這是一種哲學問題。我可能會把它放在一個視圖中,因爲日期格式化可能會因設計而異。但真的,這是你的呼喚。

1

您可以添加一個工具類來格式化日期。因此,在將值傳遞給視圖(從模型拉出之後)之前,您可以根據需要格式化時間戳,但仍然保持集中化,模塊化的功能。

0

優秀的概念問題。

理想情況下,這應該在視圖中完成。在我的應用程序中,我使用JavaScript來生成一個界面。用戶與界面進行交互,界面將這些交互映射到Ajax請求上。服務器返回時間戳(而不是格式化的日期),接口將這些時間戳映射到格式化的時間字符串上。該模型只能「理解」時間戳,並對人類對時間的理解漠不關心。控制器不「理解」任何東西。

但是,CodeIgniter不能這樣工作。相反,控制器向模型請求信息,使用視圖呈現該信息並將視圖返回給客戶端。該視圖只是用於呈現信息的模板。它不能像JavaScript那樣將信息翻譯成另一種形式。

重要原則:控制器必須對業務邏輯漠不關心。時間的含義是業務邏輯的一部分。因此,控制器不應該「理解」什麼時間戳「意味着什麼」,這對控制器將時間戳轉換爲人類可讀的字符串是必需的。這留下了觀點和模型。

如上所述,視圖不「理解」信息;它只在其周圍放置HTML標籤。

剩下的就是模型。當客戶端請求一個資源時,它應該告訴服務器它的語言環境。控制器應該將語言環境傳遞給模型,模型應該「理解」語言環境並相應地設置時間字符串的格式。

相關問題