Почему PhpSpreadsheet не может определить мой Xlsx-файл публично://?

Я работаю над модулем Drupal, который импортирует файл Xlsx и вставляет строки в базу данных. Все отлично работает, кроме PhpSpreadsheet выдает ошибку "PHP message: Uncaught PHP Exception InvalidArgumentException: "File "" does not exist." at File.php line 137" когда мой загруженный файл находится в public, Эта ошибка не возникает, когда файл находится в base_path(), Строка 137 выдает исключение, говоря, что это не файл, а \dpm(is_file($uri)) возвращается TRUE, Почему это происходит? Ниже мой код:

public function submitForm(array &$form, FormStateInterface $form_state) {
    $connection = \Drupal::database();
    $fid = $form_state->getValue("xlsx_upload");
    $input = File::load(reset($fid));
    $input->setPermanent();
    $uri = \Drupal::service('file_system')->realpath($input->getFileUri());
    //$uri = '/home/joe/file.xslx'; <--- this works perfectly.
    $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($uri);
    $spreadsheet = $reader->load($filename);
    $dataArray = $spreadsheet->getActiveSheet()->toArray();
    $connection->truncate("mitacan")->execute();
    $connection->query("SET NAMES utf8");
    foreach ($dataArray as $dataItem) {
      $connection->insert('mitacan')
      ->fields([
        'stokkodu'      => $dataItem[0],
        'logo'          => $dataItem[1],
        'resim1'        => $dataItem[2],
        'grupkodu'      => $dataItem[3],
        'grupadi'       => $dataItem[4],
        'grupindex'     => $dataItem[5],
        'paketadedi'    => $dataItem[6],
      ])
      ->execute();
    }
    drupal_set_message('Excel verisi veritabanına eklendi.');
  }

1 ответ

Решение
$spreadsheet = $reader->load($filename);

$filename не определено. Вместо этого используйте $uri.

Другие вопросы по тегам