egyg33k Bundle,从ajax调用生成csv

时间:2018-10-12 16:33:53

标签: php jquery ajax symfony

大家好,我试图在我的symfony项目中使用egyg33k捆绑包im生成一个csv文件:

重点是:

我有一个包含2个日期选择器输入和一个按钮的树枝,当我单击按钮时,我得到2个日期选择器的值并将它们传递给php操作,以在查询生成器上使用它们(所有这些的作品),但除了我在浏览器控制台上获取文件内容之外,文件没有开始下载(参见照片1) 此外,该操作在使用ajax之前已经起作用。

ajax调用:

$(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();
    }

}

Photo 1

1 个答案:

答案 0 :(得分:2)

Ciao,请扩展您的ajax调用,它只是下载您需要强制下载文件的数据。实际上,ajax调用将数据从远程传输到本地浏览器,因此您只需要一种方法,让浏览器将所有内容放入文件中并开始本地下载(从浏览器到“下载”文件夹)

test: image: node:10 script: - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/".insteadOf https://gitlab.com/ - npm install - npm test