我从Model(包含数据的数组)获取数据,我需要以特定格式显示。我需要迭代数组,格式化数据然后显示它。我应该在哪里格式化数据?在模型,控制器或视图中? 谢谢。
答案 0 :(得分:5)
对数组进行迭代并在视图中显示数据。因此我也会在视图中进行格式化。如果格式化很复杂和/或需要大量代码,请将其放在辅助函数中。
例如:
查看:
<?php foreach($array as $item): ?>
<p><?php echo format_function($item); ?></p>
<?php endforeach; ?>
助手:
function format_function($text)
{
// Do some formatting here...
return $formatted_text;
}
答案 1 :(得分:2)
如果您的viewdata包含来自不同模型的数据,或者只有1个模型的精选部分,您可以创建一个ViewModel,然后您可以使用Automapper进行映射。
ViewModels有几个优点。他们清楚地使用,整理您的数据,可以增加安全性,......
答案 2 :(得分:2)
您可以在View.Not模型中执行此操作 在视图中,您可以执行特定操作(转换/条件/)
答案 3 :(得分:2)
如果你正在开展一个更大的项目,我建议你有一个额外的层或类负责将你的对象(即域模型对象)转换为数据传输对象(视图模型对象)。
否则应用在视图中进行格式化的建议:)
转换可能涉及格式化字符串,小数(货币),日期时间等。 也可以将对象图(看看我的例子)转换成平面DTO。
控制器负责调用映射算法。
因此,在视图中,您不必迭代对象的引用。相反,您使用平坦的格式良好的视图模型。
你的观点不会混乱,看起来很干净。
.NET世界中提供了执行此转换作业的工具。它被称为AutoMapper。也许在PHP中有一个等价物。
以下是
的示例这是一个对象模型:
您可以将其转换为此智能视图模型:
此方法的优点:
分离关注
清洁视图
没有代码重复,即在每个视图中格式化日期时间。 (不要重复自己!)
此方法的缺点:
答案 4 :(得分:2)
演示!=数据格式化。请考虑以下示例:
一家国际商店,有一个产品页面,有关产品尺寸的各种信息,等等。由于商店的国际性,对于访问商店的每个区域,此数据的格式应不同。例如:在欧洲,测量值显示为度量值,而美国客户端显示格式为英制值的相同数据。 / p>
一个重要的注意事项是,对于每种格式,不应该多次存储这种特定类型的数据,尽管有关价格的数据应该如此。这是因为每个地区的产品价格做不同。另一方面,测量和日期在不同的地区是普遍相同的;只有他们显示和格式化的方式不同。应始终以尽可能少的冗余存储信息。
此类商店的视图部分(或任何基于MVC的应用程序,除此之外)除了呈现数据和确定如何向用户呈现此数据之外,不应做任何其他事情。视图不应以任何方式更改数据本身。这正是为什么有关测量和时间的信息应以 ISO标准化格式存储的原因,这使得将数据格式化为其他格式变得更加容易。例如,测量值应存储为度量值。在从数据库中检索数据集之后,每个语言环境的数据的实际格式应该在模型中进行,最好是使用静态可访问的Helper类,以获得最大的灵活性。格式化数据后,它将返回到控制器,然后控制器将其返回到当前视图。
这种处理数据格式化方式的另一个重要优点是,当您尝试通过无视图操作(即通过AJAX检索的JSON对象)获取数据集时,您的数据仍将正确格式化。以任何方式(通过“普通”HTML模板或作为JSON / XML字符串)发送回客户端的数据不应该有所不同;只有呈现的方式。
答案 5 :(得分:1)
在您的视图中执行此操作,因为它负责演示。
原因