簡體   English   中英

“未定義的索引:名稱” Laravel 5.7控制器

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM