Laravel - Попытка добиться предварительного просмотра файла Excel перед отправкой, но это работает только одним конкретным способом
Я работаю с функцией импровизации в Excel (используя пакет maatwebsite/excel), и эта часть у меня есть, но мне также нужно иметь функцию, которая позволяла бы apreview "sneak peek" перед загрузкой файла.
Мне удалось заставить его работать (рис. https://imgur.com/rySv3Ck), но ТОЛЬКО он работает определенным образом - код:
public function MakeImportPreview(Request $request)
{
$dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));
$randomDataPreviews = $dataPreview->get(0)
->take(20)
->reject(function($row) {
return
!isset($row['name'])
|| !isset($row['email'])
|| is_null($row['name'])
|| is_null($row['email'])
|| empty($row['name'])
|| empty($row['email']);
})
->toArray();
return view('clients.preview', compact('randomDataPreviews'));
}
Из класса ClientsImportPreview:
class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{
public function collection(Collection $rows)
{
return $rows->get(0)->reject(function($row) {
return
!isset($row['name'])
|| !isset($row['email'])
|| is_null($row['name'])
|| is_null($row['email'])
|| empty($row['name'])
|| empty($row['email']);
})->take(20);
}
public function limit(): int
{
return 20;
}
}
По сути, использование отклонения и проверки на пустоту / отсутствие установки было единственным способом, которым я мог заставить его работать.
Есть ли способ сделать эту работу, ища заполненные поля, в отличие от незаселенных?
Например, если я попробую следующий код вместо этого:
public function MakeImportPreview(Request $request)
{
$dataPreview = Excel::toCollection(new ClientsImport(), $request->file('file'));
$randomDataPreviews = $dataPreview->get(0)
->take(20)
->map(function($row) {
return
isset($row['name'])
|| isset($row['email'])
|| !is_null($row['name'])
|| !is_null($row['email'])
|| !empty($row['name'])
|| !empty($row['email']);
})
->toArray();
return view('clients.preview', compact('randomDataPreviews'));
}
class ClientsImportPreview implements ToCollection, WithHeadingRow, WithLimit
{
public function collection(Collection $rows)
{
return $rows->get(0)->reject(function($row) {
return
!isset($row['name'])
|| !isset($row['email'])
|| is_null($row['name'])
|| is_null($row['email'])
|| empty($row['name'])
|| empty($row['email']);
})->take(20);
}
Затем я получаю следующий результат - https://imgur.com/6iFKH4Y.
Любая помощь с благодарностью. Заранее спасибо!