2016-08-09 120 views
0

爲什麼我會在$errors[$field] .= '<div class="error"><p>' . $error . '</p></div>';這行上的代碼中得到'Illegal offset type'錯誤?爲什麼在此代碼中出現錯誤'Illegal offset type'?

代碼:

$errors = []; 
foreach ($validation->errors() as $field) 
{ 
    $errors[$field] = ''; 
    foreach ($field as $error) { 
     $errors[$field] .= '<div class="error"><p>' . $error . '</p></div>'; 
    } 
} 

驗證:

private function addError($field, $error) 
{ 
    $this->errors[$field][] = $error; 
} 

public function errors() 
{ 
    return $this->errors; 
} 

解決方案:

foreach ($validation->errors() as $key => $fieldErrors) 
{ 
    $errors[$key] = ''; 
    foreach ($fieldErrors as $error) { 
     $errors[$key] .= '<div class="error"><p>' . $error . '</p></div>'; 
    } 
} 
+1

因爲數組不能成爲陣列的密鑰。 –

回答

3
foreach ($field as $error) 

這條線表明,$field是一個數組。您不能將數組用作另一個數組的鍵。

$errors[$field] << won't work! 

要修正,更改addError方法:

private function addError($field, $error) 
{ 
    $this->errors[$field] .= $error; //I changed [$field][] to [$field] 
} 
+0

謝謝隊友,我在foreach上工作,查看編輯後的答案。我不能改變你的建議,因爲我需要知道這個字段有錯誤,比如'username'或'password'。 – William

+0

@William我的建議不會隱藏該字段的名稱。在原始代碼和我的代碼中,這個字段的名字就是'$ field'。如果你有它的工作,一切都很好。 – BeetleJuice

+0

如果您的建議中該字段的數量超過1,是不是會覆蓋之前的值? – William

相關問題