манипулирование данными массива страниц в переполнении cakeStack

я имею 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);

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

0

Решение

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

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]