[英]“Undefined index: name” Laravel 5.7 Controller
我是該博客的新手,因為我有一段時間的問題而加入了我。
以下代碼用於通過.csv文件將用戶導入數據庫,但是當我嘗試導入用戶時,出現以下錯誤。
8
"Undefined index: name"
"D:\xampp\htdocs\plataforma\app\Http\Controllers\UserController.php"
39
array:7 [▼
"request" => Request {#43 ▶}
"validator" => Validator {#257}
"file" => UploadedFile {#247 ▶}
"csvData" => """
name,username,email,password,role,idSede,idManager\r\n
Claudio Magallan,claudiomg,claudiomagallan@hotmail.com,secret,2,60,0\r\n
Cristina Vargas,cristyvg,cristyvargas@institutodeventas.com,secret,3,61,4\r\n
"""
"rows" => array:3 [▶]
"header" => array:7 [▶]
"row" => array:7 [▶]
]
非常感謝您的幫助,希望您能為我的問題提供幫助。 我附上我的控制器代碼。
public function upload(Request $request) {
$validator = Validator::make($request->all(), [
'file' => 'required'
]);
if ($validator->fails()) {
return redirect()
->back()
->withErrors($validator);
}
$file = $request->file('file');
$csvData = file_get_contents($file);
$rows = array_map("str_getcsv", explode("\n", $csvData));
$header = array_shift($rows);
foreach ($rows as $row) {
$row = array_combine($header, $row);
User::create([
'name' => $row['name'],
'username' => $row['username'],
'email' => $row['email'],
'password' => bcrypt($row['password']),
'role' => $row['role'],
'idSede' => $row['idSede'],
'idManager'=> $row['idManager'],
]);
}
flash('Users imported');
return redirect()->back();
}
錯誤標記下一行代碼:
'name'=> $ row ['name'],
問候!
以下更改可能會起作用:
$rows = array_map("str_getcsv", explode("\n", $csvData));
$header = array_shift($rows);
array_pop($rows); // delete the element
foreach ($rows as $row) { .. }
Laravel可以使用dump()
或dd()
輕松調試:
foreach ($rows as $row) {
$row = array_combine($header, $row);
dump($row); // print the current row for debugging.
User::create([
'name' => $row['name'],
...
]);
}
這將產生如下內容:
array(7) {
["name"]=> "Claudio Magallan"
....
}
array(7) {
["name"]=> "Cristina Vargas"
....
}
bool(false)
因此,錯誤之前的最后一行是false
而不是數組。 只是過濾掉這個元素。
如果僅最后一行是垃圾:使用array_pop($rows)
刪除$rows
的元素。 或手動刪除CSV最后一行中的換行符。 如果更多行是垃圾,則可以使用array_filter
刪除不符合要求的行。 例如:
$header = array_shift($rows);
$rows = array_filter($rows, function ($row) use ($header) {
return count($row) === count($header);
});
foreach ($rows as $row) { .. }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.