cakephp中分页器数组的数据操作


data manipulation of paginator array in cakephp

我有Task模型,其日期保存为时间戳,当我分页时,我不想显示为"今天","明天","下周"等。我做了自定义函数niceDate_hr($date),返回我需要的字符串。但我有问题,修改数组paginator使。我现在的代码是:

    $this->loadModel('Task');
    $this->Task->create();
    $this->Paginator->settings = array(
        'conditions' => array('Task.user_id' => $user['ID']),
        'limit' => 5,
        'order' => array('Task.date' => 'desc')
    );
    $tasks = $this->Paginator->paginate('Task');
    $ctask = new TasksController;
    foreach ($tasks as $task) {
        $task['Task']['date'] = $ctask->niceDate_hr($task['Task']['date']);
    }
    $this -> set('tasks', $tasks);

注:请原谅我的语法和拼写错误。

您违反了MVC模式。不要这样做: $ctask = new TasksController;有很多关于为什么这是错误的详细信息。只有调度程序应该实例化控制器,并且应该始终只有一个控制器实例。你从不实例化控制器。除了在测试中。

进一步,你正在做数据操作,当它需要时,应该发生在模型层,而不是控制器中的。但是你想要格式化输出,这应该发生在view层。

正确的实现应该是将您的自定义方法(它也不遵循约定(应该命名为camel case))移到helper中,并在视图中使用它。

foreach ($tasks as $task) {
       echo $this->MyFancyHelper->niceDateHr($task['Task']['date']);
}

我不知道你是如何设置日期格式的,但是CakePHP提供了一个时间帮助器,可以设置日期格式。