在CakePHP中在哪里定义视图函数?

在CakePHP中在哪里定义视图函数?,cakephp,function,view,Cakephp,Function,View,我有一个修改程序来显示事件的“日期” if($event['Event']['is_multi_day']){ if( date('n',strtotime($event['Event']['start_day']) ) == date('n',strtotime($event['Event']['end_day'])) ) $date = date('j',strtotime($event['Event']['start_day']))

我有一个修改程序来显示事件的“日期”

        if($event['Event']['is_multi_day']){
        if( date('n',strtotime($event['Event']['start_day']) ) ==  date('n',strtotime($event['Event']['end_day'])) )
            $date = date('j',strtotime($event['Event']['start_day'])).' - '.
                date('j',strtotime($event['Event']['end_day'])).' '.
                date('M',strtotime($event['Event']['end_day']));
        else
            $date = date('j',strtotime($event['Event']['start_day'])).' '.
                date('M',strtotime($event['Event']['start_day'])).' - '.
                date('j',strtotime($event['Event']['end_day'])).' '.
                date('M',strtotime($event['Event']['end_day']));    

    }else{
        $date = date('j M', strtotime($event['Event']['start_day']));
    }
我必须在显示事件的每个页面中包含该代码块。
我如何为此定义一个函数,它可以从我想要的视图中调用?

如果您正在处理的是原始数据(如图所示),并且您只想返回一个值以供显示,我将创建一个组件并在控制器级别执行此操作。如果您想包含表示标记和/或逻辑,那么您可能正在寻找一个元素。

在我看来,您将在一个显示大量事件的循环中使用该元素,并且在这种情况下,您的代码远远不是最佳的

我认为你可以减少这一行:

if( date('n',strtotime($event['Event']['start_day']) ) ==  date('n',strtotime($event['Event']['end_day'])) )
)
致:

(或类似的东西,在没有格式化的情况下比较存储值。格式化用于显示目的,而不是算法比较)

这是:

date('j',strtotime($event['Event']['end_day'])).' '.date('M',strtotime($event['Event']['end_day']));
致:

…和其他地方的类似编辑。如果这是在一个循环中,那么您需要减少不必要的函数调用的数量,并避免串接字符串


就个人而言,由于这是一个显示函数,我会将其保留在事物的视图端(与控制器相反),并且我可能会将其作为一个带有传递参数的元素来执行-请参见

,我会为此创建一个帮助器。对我来说,它比组件更合理。如果您仅使用此数据来显示它,我相信Helper是正确的解决方案

date('j',strtotime($event['Event']['end_day'])).' '.date('M',strtotime($event['Event']['end_day']));
date('j M',strtotime($event['Event']['end_day']));