我已经编写了一个类来导入特定的CSV文件。此类处理除移动和读取导入的文件以外的所有内容。这是通过使用Laravel中的de File Facade在控制器中完成的。下面的描述仅描述了一个数组,但是我使用了更多的数组,并且在类本身中也遇到了同样的问题。问题是,每次我尝试使用字符串作为键值来访问数组中的项目时,应用程序都会崩溃并出现一些模糊的错误。我在一个单独的,非Laravel的php文件中对此进行了测试,但没有出现错误。仅在我的Laravel应用中。奇怪的是,我通过以下方式测试了数组:
a)使用array_key_exists-未找到键(我同时使用了'和“)b)使用array_keys-这次我从数组中获得所有键c)例如:$ report ['student_number']-不起作用,我在这里收到错误d)例如:$ report [array_keys($ report)[0]]-此方法e)在Vanilla PHP中,我做同样的事情,在那儿我没有任何错误。
在控制器中,我通过以下方式处理上传:
$uploaded_file = $request->file('uploadfile');
$uploaded_file->move(storage_path().'/files', $uploaded_file->getClientOriginalName());
$import_file = storage_path().'/files/'.$uploaded_file->getClientOriginalName();
if(File::exists($import_file) && File::isReadable($import_file)) {
$raw_file_data = File::get($import_file);
$import = ImportStudents::getInstance();
$import_result = $import->import($raw_file_data);
}
在导入类中,我拥有私有财产:
private $report = [];
我通过以下方式用数据填充数组:
$this->report[$student_number][] = [
'field' => $field,
'db_field' => 'student_number',
'new_value' => $value,
'old_value' => $student_number,
'action' => 'updated'
];
在类中,我最终将这个数组返回给控制器:
return $this->report;
在控制器中,我将此数组传递给视图:
return view('home.import_report')->with('report', $import_result);
在刀片文件中,我使用以下代码:
@foreach($report as $report_row)
<td>{{ $report_row['field'] }}</td>
<td>{{ $report_row['db_field'] }}</td>
<td>{{ $report_row['new_value'] }}</td>
<td>{{ $report_row['old_value'] }}</td>
<td>{{ $report_row['action'] }}</td>
@endforeach
“ C:\ Windows \ Temp \ php57CD.tmp”文件不存在或不存在可读。
以上只是我得到错误的代码的一部分。如前所述,我在类代码中也遇到了相同的错误。
Laravel:6.xPHP:7.3.10
我在这里俯瞰什么?有什么问题吗?
显示报告的上述问题的解决方案,我怎么会忘记,我需要一个额外的foreach循环。
@foreach($report as $report_row)
<td>{{ $report_row['field'] }}</td>
<td>{{ $report_row['db_field'] }}</td>
<td>{{ $report_row['new_value'] }}</td>
<td>{{ $report_row['old_value'] }}</td>
<td>{{ $report_row['action'] }}</td>
@endforeach
答案在我自己的代码中已经很明显了:-(,此代码:
$this->report[$student_number][] = [
'field' => $field,
'db_field' => 'student_number',
'new_value' => $value,
'old_value' => $student_number,
'action' => 'updated'
];
@forelse($report as $student_number => $report_row)
<tr><td colspan="6" style="color: white; background-color: darkblue; padding: 0;"><h5>{{ $student_number }} - {{ $report_row[0]['name'] }}</h5></td></tr>
@foreach($report_row as $actions)
<tr>
<td></td>
<td>{{ $actions['field'] }}</td>
<td>{{ $actions['db_field'] }}</td>
<td>{{ $actions['new_value'] }}</td>
<td>{{ $actions['old_value'] }}</td>
<td>{{ $actions['action'] }}</td>
</tr>
@endforeach
@empty
<tr><td colspan="6">No changes</td></tr>
@endforelse
a)使用array_key_exists-找不到键(我同时使用了'和')b)使用array_keys-这次我从数组中获取所有键c)例如:$ report ['student_number']-不起作用,我在这里收到一个错误d)例如:$ report [array_keys($ report)[0]]-可行e)在Vanilla PHP中,我做同样的事情,在那儿我没有任何错误。
$student->first_name = $imported_row['Roepnaam'];
但是键'Roepnaam'确实存在于数组中。使用array_keys($ imported_row)我可以看到该密钥存在。
$student->first_name = $imported_row[array_keys($imported_row)[1]];
这让我感到困惑!