格式化控制器中的日期和时间

时间:2015-11-16 22:05:14

标签: cakephp cakephp-3.0

我遇到需要在控制器中格式化日期和时间信息的情况。有许多解决方案很接近,但没有一个完全奏效。我有an extended conversation about it elsewhere,但会在这里总结一下重点。

我想要完成的是创建一个带有格式化日期和时间的flash消息,如果用户碰巧没有JavaScript,可以通过Ajax或“标准”flash消息返回

我正在使用dereuromark的Ajax plugin来处理Ajax响应,而FriendsOfCake使用Bootstrap UI plugin来处理Flash消息。

我尝试使用自定义flash元素,但是在显示视图之前不会呈现,这意味着当Ajax插件创建响应时格式化结果不可用;它改为获取描述将在非Ajax情况下生成的flash输出的数组。

我尝试调整Ajax和Bootstrap UI插件,以便在有用的时间呈现flash消息,但是它包含了所有HTML包装,我在Ajax情况下不需要或不需要。< / p>

似乎解决方案是在将消息传递给flash函数之前格式化控制器中的消息,但是日期和时间的格式化是在帮助程序中完成的,我通常无法在控制器中访问它。请注意,我有一个自定义时间助手,它考虑了当前用户的首选时间和日期格式(例如,下午6:00至18:00和2015年11月16日对2015-11-16)。

我从这里考虑的三个选项是:

  1. 制作一些全局可用的日期和时间格式化函数,这些函数使用用户的首选项并从我的帮助程序中调用这些函数。我不喜欢这样,因为它感觉它将实现从它应该的位置移开,并且因为那些全局函数必须做自己的格式化而不是像我现在那样将它传递给标准的Time助手。因此,如果日期和时间的基础实现发生变化,我的实施可能会中断,例如,从碳到其他东西。

  2. 在控制器中创建一个TimeHelper实例并调用它为我做格式化。我不喜欢这个,因为它感觉不是MVC,并且创建帮助程序的方式可能至少有点依赖于CakePHP中的实现细节,再次使它很可能在将来的版本中中断。

    < / LI>
  3. 重新执行我对这两个插件所做的所有更改,但是当通过Ajax调用操作时,指定一个不同的flash元素(跳过所有HTML并只是格式化消息本身)。我不喜欢这个,因为它依赖于两个不同的群体接受我的更新(我不愿意使用他们的版本的编辑版本,因为这会导致升级噩梦),并且它不是很干(我的消息格式代码是重复的)跨越两个元素。)

  4. 我有没有考虑过一些神奇的第四种选择?对其中一个的一些轻微改动会使其可行吗?这是标准CakePHP应该提供支持的用例吗?如果所有这些问题的答案都是否定的,那么哪些攻击最不具攻击性?

    如果此处的任何内容不清楚,请告诉我,我会尝试详细说明。我没有看到添加代码到哪里会有所帮助,但我非常接近这个问题。 : - )

0 个答案:

没有答案