Манипулирование данными массива paginator в 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);

PS Прости меня за любые грамматические и орфографические ошибки.

1 ответ

Решение

Вы нарушаете схему MVC. Не делай этого: $ctask = new TasksController; Существует много информации с деталями о том, почему это не так. Только диспетчер должен создавать экземпляр контроллера, и всегда должен быть только один экземпляр контроллера. Вы никогда не создаете экземпляры контроллеров. За исключением тестов.

Далее вы делаете манипулирование данными, которое должно, когда это необходимо, происходить на уровне модели, а не на контроллере. Но вы хотите отформатировать вывод, что должно происходить в слое вида.

Правильная реализация будет состоять в том, чтобы переместить ваш пользовательский метод, который также не следует соглашениям (должен называться верблюжьим), в помощник и использовать его в вашем представлении.

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

Я не знаю, как вы форматируете свою дату, но CakePHP поставляется с помощником времени, который также позволяет форматировать.

Другие вопросы по тегам