egyg33k Bundle, генерирующий CSV из вызова AJAX - PullRequest
0 голосов
/ 12 октября 2018

Привет всем, я пытаюсь сгенерировать CSV-файл с пакетом egyg33k, который я использую в моем проекте Symfony:

Дело в следующем:

У меня есть веточка, которая содержит 2 входа для выбора даты икнопка, когда я нажимаю на кнопку, я получаю значения двух сборщиков даты и передаю их в действие php, чтобы использовать их в построителе запросов (все это работает), но файл не начинает загрузку, кроме того, что я получаю егосодержимое на консоли браузера (см. фото 1), кроме того, действие работало до использования ajax.

ajax call:

$(document).ready(function() {
$("#get_extract").on("click", function() {
    $.ajax({
        method: "POST",
        url: "/back-office/extraction",
        data: {
            begin_date: $("#begin_date").val(),
            end_date: $("#end_date").val()
        }
    })
});

});

PHP:

public function getExtractRecordsAction(Request $request)
{
    if ($request->isXmlHttpRequest() || $request->query->get('showJson') == 1) {
        $beginDate = $request->get('begin_date');
        $endDate   = $request->get('end_date');

        $recordsRepository = $this->getDoctrine()->getRepository(Record::class);
        $query             = $recordsRepository->createQueryBuilder('r')
             ->where('r.createdAt BETWEEN :beginDate AND :endDate')
            ->setParameter('beginDate', $beginDate)
            ->setParameter('endDate', $endDate)
            ->getQuery();

        $records = $query->getResult();
        $writer = $this->container->get('egyg33k.csv.writer');
        $csv    = $writer::createFromFileObject(new \SplTempFileObject());
        $csv->insertOne([
            'ID',
            'FIRST_NAME',
            'LAST_NAME',
            'CIVILITY',
            'PHONE_NUMBER',
            'EMAIL',
            'ZIP_CODE',
            'OPTIN',

        ]);
        foreach ($records as $record) {
            $csv->insertOne([
                $record->getId(),
                $record->getPersonalDetails()->getFirstName(),
                $record->getPersonalDetails()->getLastName(),
                $record->getPersonalDetails()->getCivility(),
                $record->getPersonalDetails()->getPhoneNumber(),
                $record->getPersonalDetails()->getEmail(),
                $record->getPersonalDetails()->getZipCode(),
                $record->getPersonalDetails()->getOptin(),


            ]);
        }
        $csv->output('EXAMPLE.csv');
        exit();
    }

}

Фото 1

1 Ответ

0 голосов
/ 12 октября 2018

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

$("#get_extract").on("click", function() { $.ajax({ method: "POST", url: "/back-office/extraction", data: { begin_date: $("#begin_date").val(), end_date: $("#end_date").val() }, success: function(csv_content) { let filename = 'data.csv'; let csvFile = new Blob([csv_content], {type: "text/csv"}); let downloadLink = document.createElement("a"); downloadLink.download = filename; downloadLink.href = window.URL.createObjectURL(csvFile); document.body.appendChild(downloadLink); downloadLink.click(); } })

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