Манипулирование данными массива 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 поставляется с помощником времени, который также позволяет форматировать.