2015-07-08 5 views
1

У меня есть представление с несколькими мегабайтами данных, и я ожидаю, что он будет радикально расти. Функция индекса контроллера реализована по умолчанию, с разбивкой на страницы. Я хотел бы экспортировать это представление в csv без внесения больших изменений в контроллер (я в порядке, чтобы определить строки и строки заголовков, которые должны быть включены в CSV, но не удалять разбиение на страницы, поскольку это тормозит представление html).Cakephp: перебирать страницы в пользовательском представлении

Идея проста: визуализируйте csv view template, измените страницу, сделайте еще один. Но как изменить текущие параметры разбивки на страницы в пользовательском представлении?

PS: Я взглянул на csv plugin. Он не работает с разбиением на страницы, поэтому я выхожу из пределов памяти, он также создает файл tmp, я предпочитаю передавать контент на лету.

ответ

1

Я бы не использовал здесь paginator, просто получите общее количество записей, затем сделайте цикл while() и извлеките данные партиями, чтобы избежать ограничений памяти. И отправьте его, как он поступает из базы данных непосредственно клиенту. Используйте HTTP-клиент, который поставляется с CakePHP, и установите правильные свойства заголовка.

Смотрите эти два ответа, как отправить его в виде потока:

+0

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

+1

Ну, тогда реализуйте его в модельном методе, передайте объект ответа этому методу и отправьте ответ от контроллера. Однако вы его реализуете, вам придется каким-то образом вернуть обработчик потока или что-то подобное из метода модели, который вы можете отправить клиенту. Но передача данных клиенту не является заданием модели. Модель не должна знать о запросе. – burzum

+0

Это именно то, о чем я говорю. Речь идет не о модели, даже о контроллере, а о представлении или «контроллере просмотра», а последний - это пользовательский класс представления. Другая причина, по которой можно избежать реализации модели/контроллера, заключается в том, что я хочу получить эту функциональность на всем реализованном коде без ее модификации (я все равно прекрасно реализую некоторые отдельные шаблоны шаблонов или каким-то образом определяю строки заголовков). – hryamzik

Смежные вопросы