Как использовать классы PHPSpreadsheet внутри функции - PullRequest
0 голосов
/ 18 июня 2019

Я создал функцию AJAX, которая запускается при событии щелчка на внешнем интерфейсе.Внутри этой функции я хочу иметь возможность генерировать электронную таблицу XLS, но я не могу сделать это внутри функции.Я считаю, что это связано со мной, объявляя операторы использования вне функции, может быть, функция не может получить доступ к классам?Я попытался объявить их внутри функции, и я получил эту ошибку;

syntax error, unexpected 'use'

У кого-нибудь есть решение для этого?Вот мой код:

add_action('wp_ajax_nopriv_campaign', 'email_campaign');
add_action('wp_ajax_campaign', 'email_campaign');

require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

function email_campaign(){
    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'Hello World !');
    $writer = new Xlsx($spreadsheet);
    $writer->save('hello world.xlsx');

    die();
}

вот как я вызываю свою функцию;

$('#campaign_form').submit(function(e){
    e.preventDefault();

    $.ajax({
        url: ajax_url,
        type: 'post',
        dataType: 'json',
        data: { 
            action: 'campaign'
        },
        error : function(response){
            console.log(response);
        },
        success : function(response){
            console.log(response);
        }
    });
});

1 Ответ

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

Измените ваш код как:

require_once 'vendor/autoload.php';

function email_campaign(){
    $path = dirname(__DIR__).'/sheets';
    $fileName = 'hello_world.xlsx';

    $spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'Hello World !');
    $writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
    $writer->save($path.'/'.$fileName);
}
...