number_format(与视图相关的逻辑)应该在哪里进行CakePHP?

The*_*ing 6 php cakephp

在与同事讨论之后,我们认为应该采用与观点相关的逻辑.

例如,假设我们想要在视图中显示一个数字.我认为number_format(或者CakeNumber::format我们正在使用CakePHP)应该放在视图中,因为它与我们展示的内容有关.我的同事认为它应该进入控制器,因为这是所有逻辑的所在.

在这种情况下,我们有两个视图,一个用于网站和最终用户,另一个用于返回json响应的API视图.如果我将代码放在控制器中,我必须检查我正在使用哪个视图,因为它不是在json响应中给出一个字符串,而实际上它是一个整数.出于这个原因,我非常支持视图中的代码.

问题是,谁"更"正确,数字格式应该在哪里?

除了我在视图中放置代码的论点之外,他很乐意htmlentities在视图中使用,但我认为如果我不允许使用number_format,他就不能拥有htmlentities它,并且它应该在控制器中完成.

bur*_*zum 5

例如,假设我们想要在视图中显示一个数字.我认为number_format(或我们使用CakePHP的CakeNumber ::格式)应该放在视图中,因为它与我们展示的内容有关.我的同事认为它应该进入控制器,因为这是所有逻辑的所在.

你的好友错了.你应该使用NumberHelper,它实际上是静态CakeNumber的包装器.您通常希望在应用程序中避免使用静态和单例,也可以为帮助程序设置别名,因此请在视图中使用NumberHelper.视图是正确的地方.

在这种情况下,我们有两个视图,一个用于网站和最终用户,另一个用于返回json响应的API视图.如果我将代码放在控制器中,我必须检查我正在使用哪个视图,因为它不是在json响应中给出一个字符串,而实际上它是一个整数.出于这个原因,我非常支持视图中的代码.

控制器不需要更改单行以支持json和其他输出.那么,您可以使用视图变量的内置序列化到json/xml或构建自定义json视图.阅读本章.但是,不需要创建两个方法或用业务逻辑填充控制器,这实际上是错误的.

问题是,谁"更"正确,数字格式应该在哪里?

绝对是观点.

控制器应该是瘦的,不包含任何业务逻辑:

在此输入图像描述

除了我在视图中放置代码的论点之外,他很乐意在视图中使用htmlentities,但我认为如果我不允许使用number_format,他就不能拥有htmlentities并且它应该在控制器中完成.

使用h()这是htmlspecialchars()的快捷方式.并确保你用它回应那里的一切.框架附带的所有核心帮助程序将在内部为您执行,如果您通过它们但注意可能不使用它的第三方帮助程序!


Sty*_*hon 4

根据 MVC 的规则,所有逻辑都应该放在模型中,而不是控制器中。控制器应该只将视图所需的所有内容放在一起,然后将其交给要显示的视图。

根据我的经验,视图通常最终会包含一小部分逻辑。将格式转换为数字或使用 htmlentities 转义内容最终都是非常小的事情,并且可以在视图中使用,有些人甚至会考虑使用这些函数作为格式而不是业务逻辑。很多人,包括我自己,将诸如此类的小函数称为助手(正如 Armage 在评论中指出的那样),并且在视图中使用它们是常见的并且绝对被接受。

当然,这是我多年来试图将内容分开并放在正确的位置形成的所有观点,您的里程可能会有所不同。