Symfony Batch Action - PullRequest
       25

Symfony Batch Action

0 голосов
/ 18 июня 2010

Я пытаюсь создать пакетное действие (symfony admin), которое позволяет создавать / загружать на лету zip-файл, содержащий фотографии пользователей, которые доступны в каталоге uploads / images.

Вот код, который я уже реализовал:

public function executeBatchDownloadFotos(sfWebRequest $request)
    {
        $zip = new ZipArchive();

        // atheletes identifiers
        $ids = $request->getParameter('ids');

        // get all the atheletes objects
        $q = Doctrine_Query::create()
            ->from('Atleta a')
            ->whereIn('a.id', $ids);

        foreach ($q->execute() as $atleta)
        {
            $zip->addFile($atleta->id . '_' . $atleta->Clube . '.jpg', 'uploads/atletas/' . $atleta->id . '_' . $atleta->Clube . '.jpg');
        }
    }

С другой стороны, вот вид конфигурации:

BatchDownloadFotos:
  http_metas:
    content-type: application/zip
  has_layout:     false

По какой-то причине каждый раз, когда выполняется пакетное действие, браузер не запрашивает у меня окно для загрузки zip-файла.

1 Ответ

2 голосов
/ 18 июня 2010

После создания ZIP-архива в файле контроллера вы должны отправить содержимое в браузер.

Вы можете сделать это, используя методы, описанные здесь: http://www.symfony -project.org / gentle-Введение / 1_4 / ru / 06-Внутри-контроллер-слой # chapter_06_sub_action_termination

Сейчас вы пытаетесь создать ZIP-файл, но не отправляете его в браузер. Вы должны использовать методы setContent () и setHttpHeader ().

Ваше действие может выглядеть следующим образом (вы должны добавить обработку ошибок):

public function executeIndex(sfWebRequest $request)
{
  $fileName = '/tmp/test.zip';
  $zip = new ZipArchive();

  $zip->open($fileName, ZipArchive::CREATE);

  // add some files to archive
  $zip->addFile('/tmp/test', 'test.txt');

  $zip->close();

  $this->getResponse()->setContent(file_get_contents($fileName));
  $this->getResponse()->setHttpHeader('Content-Type', 'application/zip');
  $this->getResponse()->setHttpHeader('Content-Disposition',
    'attachment; filename=download.zip');

  return sfView::NONE;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...